4-leetcode-Median of Two Sorted Arrays

来源:互联网 发布:美工废物利用教案 编辑:程序博客网 时间:2024/06/08 00:05

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;    }};



原创粉丝点击