/*
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
*/
#include "iostream"
#include "vector"
using namespace std;
class Solution
{
public:
void print(vector<int> &nums)
{
for (int i = 0; i < nums.size(); i++)
{
cout << nums[i] << " ";
}
cout << endl;
}
double findMedianSortedArrays(vector<int> &nums1, vector<int> &nums2)
{
int l1 = 0, l2 = 0, r1 = nums1.size(), r2 = nums2.size();
vector<int> sorted;
while (l1 < r1 && l2 < r2)
{
if (nums1[l1] < nums2[l2])
{
sorted.push_back(nums1[l1++]);
}
else
{
sorted.push_back(nums2[l2++]);
}
}
while (l1 < r1)
{
sorted.push_back(nums1[l1++]);
}
while (l2 < r2)
{
sorted.push_back(nums2[l2++]);
}
int s = r1 + r2;
double ans;
if (s % 2 == 1)
{
ans = sorted[s / 2];
}
else
{
ans = double(sorted[s / 2] + sorted[s / 2 - 1]) / 2;
}
return ans;
}
};
int main(void)
{
vector<int> nums1, nums2;
int num;
double median;
Solution S;
// 输入nums1
while (true)
{
cin >> num;
nums1.push_back(num);
if (cin.get() == '\n')
break;
}
//输入nums2
while (true)
{
cin >> num;
nums2.push_back(num);
if (cin.get() == '\n')
break;
}
median = S.findMedianSortedArrays(nums1, nums2);
cout << median << endl;
return 0;
}
【Leetcode】4. 寻找两个有序数组的中位数C++(双指针法)
猜你喜欢
转载自blog.csdn.net/weixin_44936889/article/details/104059580
今日推荐
周排行