Leetcode 4 Median of Two Sorted Arrays 两排序数组的中位数
2018-01-31 14:03
471 查看
如下实现一个方法找两个数组中第n大的数:
假定需要找nums1的下标(s1,e1)范围内nums2的下标(s2,e2)范围内的第n个大小的数, 我们先把nums1和nums2各自的中点p1, p2 找出:
问题就变成, 找上图的第nth - (p2 - s2) 个元素.
如此可以迭代下去, 到其中一对游标相遇的时候, 就很好解决了.
如上, 找到第n大的数, 问题就等于是解决了. 可以顺利找到中位数.
假定需要找nums1的下标(s1,e1)范围内nums2的下标(s2,e2)范围内的第n个大小的数, 我们先把nums1和nums2各自的中点p1, p2 找出:
问题就变成, 找上图的第nth - (p2 - s2) 个元素.
如此可以迭代下去, 到其中一对游标相遇的时候, 就很好解决了.
如上, 找到第n大的数, 问题就等于是解决了. 可以顺利找到中位数.
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { // write your code here int len1=nums1.size(); int len2=nums2.size(); int len=len1+len2; if(len & 1){ return findKth(nums1,0,nums2,0,len/2+1); } return (findKth(nums1,0,nums2,0,len/2)+findKth(nums1,0,nums2,0,len/2+1))/2; } double findKth(vector<int>& nums1,int i1,vector<int>& nums2,int i2,int k){ if(i1>=nums1.size()){ return nums2[i2+k-1]; } if(i2>=nums2.size()){ return nums1[i1+k-1]; } if(k==1){ return min(nums1[i1],nums2[i2]); } int key1=i1+k/2-1>=nums1.size()?INT_MAX:nums1[i1+k/2-1]; int key2=i2+k/2-1>=nums2.size()?INT_MAX:nums2[i2+k/2-1]; if(key1<key2){ return findKth(nums1,i1+k/2,nums2,i2,k-k/2); }else{ return findKth(nums1,i1,nums2,i2+k/2,k-k/2); } } };
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【004-Median of Two Sorted Arrays(两个排序数组的中位数)】
- [leetcode] Median of Two Sorted Arrays 两个排序数组找出第k个数,或者中位数
- [LeetCode] Median of Two Sorted Arrays 两个排序数组的中位数
- LeetCode(40) Median of Two Sorted Arrays (两排序数组中位数)
- 【LeetCode】004 Median of Two Sorted Arrays 两个排序数组合并后的中位数
- LeetCode:4_Median of Two Sorted Arrays | 求两个排序数组的中位数 | Hard
- leetcode04 Median of Two Sorted Arrays 两个已排序数组的中位数
- LeetCode 4 : Median of Two Sorted Arrays ---- 两排序数组的中位数
- LeetCode-Median of Two Sorted Arrays,找出两个排好序的数组的中位数
- [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数
- 4.两个排序数组的中位数(Median of Two Sorted Arrays)
- [leetcode] Median of Two Sorted Arrays 寻找两个有序数组的中位数
- Median of Two Sorted Arrays 两个有序数组的中位数@LeetCode
- [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数
- Median of Two Sorted Arrays(找两个排序数组的中位数,二分法)
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- 【转载】两个排序数组的中位数 / 第K大元素(Median of Two Sorted Arrays)
- Median of Two Sorted Arrays 两个有序数组的中位数@LeetCode
- leetcode 4 : Median of Two Sorted Arrays 找出两个数组的中位数
- [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数