4-leetcode-Median of Two Sorted Arrays

11/25/2017 leetcode website algorithm problem

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
就是在两个排序的整形数组中找到中位数。

Feak Code

Initial

Judge two groups of vector<int>

nums1 is empty

nums2 is empty

nums1 and nums2 all empty

Process

need to consider three condition: 

middle number exists in nums1 and nums2

middle number only exists in nums1

middle number only exists in nums2

Output

middle numbers maybe have two numbers middle_num[0] and middle_num[1]

Data Structure:

vector<int> middle_num(0), only need the last two numbers

下面给出C++代码:特别注意在使用数据做处理运算时必须注意数据类型带来的影响

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        // store middle nums
        vector<int> store_middle_num(0);
        
        int nums1_index = 0;
        int nums2_index = 0;
        int nums_middle_left = 0;
        int nums_middle_right = 0;
        int nums_length = nums1.size()+nums2.size();
        
        if(nums1.size() == 0 && nums2.size() == 0) return 0;
        if(nums1.size() == 0) return (nums2[nums2.size()/2.0]+nums2[(nums2.size()/2.0-0.5)])/2.0;
        if(nums2.size() == 0) return (nums1[nums1.size()/2.0]+nums1[(nums1.size()/2.0-0.5)])/2.0;
        if(nums_length%2 == 0){
            nums_middle_left = nums_length/2-1;
            nums_middle_right = nums_length/2;
        }else{
            nums_middle_left = nums_length/2;
            nums_middle_right = nums_length/2;
        }
        int i = 0;
        for(i = 0; i < nums_length; ++i){
            if(nums1_index == nums1.size() || nums2_index == nums2.size()) break;
            if(nums1[nums1_index] < nums2[nums2_index]){
                if(i == nums_middle_left || i == nums_middle_right){
                    store_middle_num.push_back(nums1[nums1_index]);
                }
                nums1_index++;
            }else{
                if(i == nums_middle_left || i == nums_middle_right){
                    store_middle_num.push_back(nums2[nums2_index]);
                }
                nums2_index++;
            }
        }
        
        if(nums1_index == nums1.size()){
            if(i <= nums_middle_left){
                store_middle_num.push_back(nums2[nums_middle_left-nums1.size()]);
                store_middle_num.push_back(nums2[nums_middle_right-nums1.size()]);
            }else{
                store_middle_num.push_back(nums2[nums_middle_right-nums1.size()]);
            }
        }
        if(nums2_index == nums2.size()){
            if(i <= nums_middle_left){
                store_middle_num.push_back(nums1[nums_middle_left-nums2.size()]);
                store_middle_num.push_back(nums1[nums_middle_right-nums2.size()]);
            }else{
                store_middle_num.push_back(nums1[nums_middle_right-nums2.size()]);
            }
        }
        if(nums_middle_right == nums_middle_left)
            return store_middle_num[0];
        return (double)(store_middle_num[0]+store_middle_num[1])/2;
    }
};



猜你喜欢

转载自blog.csdn.net/u011687724/article/details/78634256