LeetCode4 :median of two sorted arrays---求两个有序数组的中位数

class Solution {
public:
    double FindKthNumber(vector<int> numbers1, vector<int>numbers2, int len1, int len2, int start1, int start2, int k){

        if (len1 > len2)
            return    FindKthNumber(numbers2, numbers1, len2, len1, start2, start1, k);
        if (len1 == 0)
            return numbers2[start2 + k - 1];
        if (k == 1)
            return min(numbers1[start1], numbers2[start2]);
        int p1 = min(k / 2, len1);
        int p2 = k - p1;
        if (numbers1[start1 + p1 - 1] < numbers2[start2 + p2 - 1])
            return FindKthNumber(numbers1, numbers2, len1 - p1, len2, start1 + p1, start2, k - p1);
        else if (numbers1[start1 + p1 - 1] > numbers2[start2 + p2 - 1])
            return FindKthNumber(numbers1, numbers2, len1, len2 - p2, start1, start2 + p2, k - p2);
        else
            return numbers1[start1 + p1 - 1];
    }
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int len1=nums1.size();
        int len2=nums2.size();
        int k=(len1+len2)/2;
        if((len1+len2)%2==0)
            return (FindKthNumber(nums1,nums2,len1,len2,0,0,k)+FindKthNumber(nums1,nums2,len1,len2,0,0,k+1))/2;
        else
            return FindKthNumber(nums1,nums2,len1,len2,0,0,k+1);

    }
};
时间: 2024-10-16 09:20:49

LeetCode4 :median of two sorted arrays---求两个有序数组的中位数的相关文章

leetcode | Median of Two Sorted Arrays 寻找2个有序数组中第k大的值

问题 Median of Two Sorted Arrays There are two sorted arrays A and B 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)). 分析 本题更经典通用的描述方式时: 给定2个有序数组,找出2个数组中所有元素中第k大的元素. 思路1 直观思

求两个有序数组的中位数

这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉.后来搜了一下leetcode的难度分布表(leetcode难度及面试频率)才发现,该问题是难度为5的问题,真是小看了它!网上搜了很多答案,但是鲜见简明正确的解答,唯有一种寻找第k小值的方法非常好,在此整理一下. 首先对leetcode的编译运行吐槽一下:貌似没有超时判断,而且small和large的数据集相差很小.此题一开始我采用最笨的方法去实现,利

求两个有序数组的中位数(4. Median of Two Sorted Arrays)

先吐槽一下,我好气啊,想了很久硬是没有做出来,题目要求的时间复杂度为O(log(m+n)),我猜到了要用二分法,但是没有想到点子上去.然后上网搜了一下答案,感觉好有罪恶感. 题目原型 正确的思路是:把问题转化一下,假设任意给一个k值,求这两个数组合并并按大小排序之后的第k个值.如此一来求中位数只是一个特例而已. 那如何搜索两个有序序列中第k个元素呢,这里又有个技巧.假设序列都是从小到大排列,对于第一个序列中前p个元素和第二个序列中前q个元素,我们想要的最终结果是:p+q等于k-1,且一序列第p个

Median of Two Sorted 求两个有序数组的中位数

中位数是把一个数的集合划分为两部分,每部分包含的数字个数相同,并且一个集合中的元素均大于另一个集合中的元素. 因此,我们考虑在一个任意的位置,将数组A划分成两部分.i表示划分数组A的位置,如果数组A包含m个元素,则划分位置有m+1种情况.因此,i的取值范围是0~m. 当i=0时,表示left_A为空:当i=m时,表示right_A为空. 同理,我们也可以划分B数组: 我们把left_A和left_B放到一个集合中,把right_A和right_B放到一个集合中. 如果想要获得中位数,要保证len

求两个有序数组的中位数或者第k小元素(转载)

http://www.cnblogs.com/TenosDoIt/p/3554479.html http://www.cnblogs.com/TenosDoIt/p/3675220.html

[LeetCode] 4. Median of Two Sorted Arrays 两个有序数组的中位数

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)). 求两个有序数组的中位数,并限制了时间复杂度O(log (m+n)),看到这个时间复杂度,自然想到用二分搜索Binary Search. 对于一个长度为n的已

寻找两个有序数组的中位数 C++实现leetcode系列(四)

给定两个大小为 m 和 n 的有序数组 nums1和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 这道题让我们求两个有序数组的中位数,而且限制了时间复杂度为 O(log (m+n))

《LeetCode-0004》 寻找两个有序数组的中位数-Median of Two Sorted Arrays

题目给定两个大小为 m 和 n 的有序数组nums1和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3]nums2 = [2] 则中位数是 2.01234示例 2: nums1 = [1, 2]nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.51234概念中位数的概念:对于有限的数集,可以通过把所有观察值高低排序后找出正中间

leetcode第四题:两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 代码如下: def median(A, B): m, n = len(A), le

【LeetCode】4. 寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 分析:给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 lo