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