美文网首页
4. Median of Two Sorted Arrays

4. Median of Two Sorted Arrays

作者: 要上班的斌哥 | 来源:发表于2017-10-26 22:49 被阅读25次

题目

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)).

Example 1:

nums1 = [1, 3]
nums2 = [2]

The median is 2.0

Example 2:

nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

解题思路

这道题是求 2 个有序数组的中间值,那么就先合并数组,然后取中间值。

  1. 判断有没有数组为空,若是有一个数组为空,那么直接操作另一个数组就可以了。
  2. 合并数组过程中,需要留意数组边界问题。
  3. 由于是取合并数组的中间值,那么并不需要将 2 个数组完全合并,只要合并后的数组长度为两个数组长度之和的 1/2 即可。
  4. 若是2个数组长度之和为偶数,那么中间值是需要从合并后数组的 2 个值中取平均数。若为奇数,那么直接从合并后数组取值即可。

解题代码

double medianSortedArrays(vector<int>& nums){
    int mid = nums.size() / 2;
    if (nums.size() % 2) {
        // 偶数
        return (nums[mid]);
    }else{
        // 奇数
        return (nums[mid] + nums[mid-1])/2.0;
    }
    return 0;
}

double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    
    if (nums1.size() == 0) {
        return medianSortedArrays(nums2);
    }
    
    if (nums2.size() == 0) {
        return medianSortedArrays(nums1);
    }
    
    vector<int> nums3 ;
    
    int size = (nums1.size() + nums2.size());
    int mid = size / 2;
    
    int nums1Value = 0,nums2Value = 0;
    int nums1Index ,nums2Index,i;
    
    for (i = nums1Index = nums2Index = 0; i < size; i++) {
        //边界处理
        if(nums1Index < nums1.size())
        {
            nums1Value = nums1[nums1Index];
        }else{
            nums1Value = INT_MAX;
        }
        //边界处理
        if(nums2Index < nums2.size())
        {
            nums2Value = nums2[nums2Index];
        }else{
            nums2Value = INT_MAX;
        }
        if (nums1Value < nums2Value) {
            nums3.push_back(nums1Value);
            nums1Index ++;
        }else{
            nums3.push_back(nums2Value);
            nums2Index ++;    
        }
        if(i == mid){
            break;
        }
    }
    if (size % 2) {
        // 奇数
        return (nums3[mid]);
    }else{
        // 偶数
        return (nums3[mid] + nums3[mid-1])/2.0;
    }
    return 0;
}

参考

  1. http://blog.csdn.net/hk2291976/article/details/51107543
  2. https://leetcode.com/problems/median-of-two-sorted-arrays/description/

相关文章

网友评论

      本文标题:4. Median of Two Sorted Arrays

      本文链接:https://www.haomeiwen.com/subject/wnacpxtx.html