力扣 寻找两个正序数组的中位数 使用 C++ 迭代器 通过
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
Median of the Two Sorted Arrays
Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n)).
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays
successful code
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int> target;
auto it1 = nums1.begin();
auto it2 = nums2.begin();
if(nums1.size() == 0){
target = nums2;
}else if(nums2.size() == 0){
target = nums1;
}else{
auto inums = nums1.size()+nums2.size();
while(inums--)
{
if(it1==nums1.end() )
{
target.push_back(*it2++);
continue;
}
if(it2==nums2.end() )
{
target.push_back(*it1++);
continue;
}
if(*it1 <= *it2)
{
target.push_back(*it1);
it1++;
}
else
{
target.push_back(*it2);
it2++;
}
}
}
double rvaule = 0.0;
auto mid = target.begin() + (target.end() - target.begin()) / 2;
if(target.size() % 2 == 0)
{
rvaule = (*mid + *(mid-1)) / 2.0;
}
else{
rvaule = *mid ;
}
return rvaule;
}
};
过程出现的issue
两个正序数组, 如何使用迭代器排序成一个有序数组, 问题: 最后的it.end()问题
如
vector<int> nums1{1,3,7};
vector<int> nums2{2,4};
判断条件是 if(*it1 <= *it2)
当 4为最后 加入后 如何 加入 7
vector<int> nums1{1,3,7};
vector<int> nums2{2,4};
vector<int> target;
auto it1 = nums1.begin();
auto it2 = nums2.begin();
auto inums = nums1.size()+nums2.size();
// cout << "inums : "<< inums<<endl;
while(inums--)
{
if(*it1 <= *it2)
{
target.push_back(*it1);
if((it1 )!=nums1.end())
it1++;
}
else if(it2!=nums2.end())
{
target.push_back(*it2);
if((it2 )!=nums2.end())
it2++;
}
}
for (auto i : target)
cout << i <<endl;
double rvaule = 0.0;
auto mid = target.begin() + (target.end() - target.begin()) / 2;
rvaule = *mid / 2.0;
cout << "return : "<< rvaule<<endl;
解决: 单独增加end相关的判断
while(inums--)
{
if(it1==nums1.end())
{
target.push_back(*it2);
continue;
}
if(it2==nums2.end())
{
target.push_back(*it1);
continue;
}