4. Median of Two Sorted Arrays
2016-05-05 19:31
267 查看
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
public class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len; if(nums1.length==0){ len = nums2.length; if(len%2==0) return (double)(nums2[len/2-1]+nums2[len/2])/2; else return nums2[len/2]; } if(nums2.length==0){ len = nums1.length; if(len%2==0) return (double)(nums1[len/2-1]+nums1[len/2])/2; else return nums1[len/2]; } len = nums1.length + nums2.length; if(len%2==0) return (double)(findK(nums1,0,nums1.length-1,nums2,0,nums2.length-1, len/2-1)+findK(nums1,0,nums1.length-1,nums2,0,nums2.length-1, len/2))/2; else return findK(nums1,0,nums1.length-1,nums2,0,nums2.length-1, len/2); } public int findK(int[] nums1, int s1, int e1, int[] nums2, int s2, int e2, int k){ //k started from 0 //End condition if(s1==e1){ if(s2+k<=e2 //avoid overflow && nums1[s1]>nums2[s2+k]) return nums2[s2+k]; else if(k==0 //avoid overflow || nums1[s1]>nums2[s2+k-1]) return nums1[s1]; else return nums2[s2+k-1]; } if(s2==e2){ if(s1+k<=e1 && nums2[s2]>nums1[s1+k]) return nums1[s1+k]; else if(k==0 || nums2[s2]>nums1[s1+k-1]) return nums2[s2]; else { return nums1[s1+k-1]; } } int m1 = (s1+e1) >> 1; //middle(for odd) or left middle(for even) int m2 = (s2+e2) >> 1; if(k > (e1+e2-s1-s2)/2){ //K is at the second half if(nums1[m1] < nums2[m2]){ //delete first half of nums1 return findK(nums1, m1+1, e1, nums2, s2, e2, k-(m1-s1+1)); } else{ //delete first half of nums2 return findK(nums1, s1, e1, nums2, m2+1, e2, k-(m2-s2+1)); } } else{//K is at the first half if(nums1[m1] < nums2[m2]){ //delete second half of nums2 return findK(nums1, s1, e1, nums2, s2, m2, k); } else{ //delete second half of nums1 return findK(nums1, s1, m1, nums2, s2, e2, k); } } } }
相关文章推荐
- MMDrawerController,最简代码实现抽屉效果
- 标准C++中的string类的用法总结
- http报文格式和post, get方式区别与误区(很不错哦)
- 匈牙利算法解决指派问题清晰流程
- android设计模式——建造者模式
- 将空格用%20替换
- 优先队列+括号配对 51Nod1476 括号序列的最小代价
- 线程间通信:生产者消费者(等待唤醒机制)
- 使用Unity3D 自主实战开发的赛车游戏实例,关键点记录 (六)之自动寻路及优化
- 浅谈锚链接(native 嵌套 h5)
- 程序员必读书单
- 实验一:认识树莓派
- JVM工作原理
- Win10太高端,如何连接XP / Win7 共享出来的打印机?
- CSS 颜色代码 qt
- swift实现ios类似微信输入框跟随键盘弹出的效果
- Exercise(12):纸牌均分
- VC Excel类操作类
- B. Gerald is into Art
- 前端学习