多数组上中位数
2016-05-06 13:37
239 查看
问题描述:
给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数。
例如:
arr1 = {1,2,3,4};
arr2 = {3,4,5,6};
一共8个数则上中位数是第4个数,所以返回3。
arr1 = {0,1,2};
arr2 = {3,4,5};
一共6个数则上中位数是第3个数,所以返回2。
要求:时间复杂度O(logN)
最优解代码:
给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数。
例如:
arr1 = {1,2,3,4};
arr2 = {3,4,5,6};
一共8个数则上中位数是第4个数,所以返回3。
arr1 = {0,1,2};
arr2 = {3,4,5};
一共6个数则上中位数是第3个数,所以返回2。
要求:时间复杂度O(logN)
最优解代码:
class Solution { public: int getupmedian(vector<int> &arr1, int arr1b,int arr1e,vector<int> &arr2,int arr2b,int arr2e){ int mid1=(arr1e+arr1b)/2; int mid2=(arr2e+arr2b)/2; int offest=((arr1e-arr1b+1)&1)^1; if(arr1e<arr1b) return -1; if(arr1e==arr1b) return arr1[arr1b]>arr2[arr2b]?arr2[arr2b]:arr1[arr1b]; if(arr1[mid1]==arr2[mid2]) return arr1[mid1]; else if(arr1[mid1]>arr2[mid2]) return getupmedian(arr1, arr1b,mid1,arr2,mid2+offest,arr2e); else return getupmedian(arr1, mid1+offest,arr1e,arr2,arr2b,mid2); } int getUpMedian(vector<int> arr1, vector<int> arr2) { int len=arr1.size(); return getupmedian(arr1,0,len-1,arr2,0,len-1); } };
相关文章推荐
- 百度地图使用指南
- 数据类型强转_笔记
- Android 带你玩转实现游戏2048 其实2048只是个普通的控件
- UIMenuController使用
- 【Leetcode】之 Spiral Matrix
- NOIP2012 普及组 T3 摆花——S.B.S.
- java.lang.String.indexOf()方法
- MySQL Connector ODBC 安装出现 “找不到指定的模块xxx”
- wps操作记录
- Nginx负载均衡配置实例详解
- Java/Android引用类型及其使用分析
- rpmbuild的一个小常识
- Axis2学习笔记:用户身份认证
- Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么
- iOS的几种后台机制
- 串行异步网络请求的简单实现
- java中BlockingQueue 的使用
- Oracle数据库语法之【DML】常用汇总-【更新】
- 数组中局部最小数的位置
- Linux和win7(win10)双系统时间错误问题 时间相差8小时