GitHub-LT-03-源码 :large_blue_diamond:归并
问题描述
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。 请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
解法1: 归并可以解 但复杂度不符合log(m+n)
- 执行用时:28 ms, 在所有 C++ 提交中击败了22.02%的用户
- 内存消耗:8.2 MB, 在所有 C++ 提交中击败了100.00%的用户
算法复杂度
O(n+m)
取决于最长的数组的长度
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
//* 合并两个数组 因为两个数组都是有序的,所以可以进行merge ==> 类似两个牌堆
//* 然后看两个数组的大小,如果是偶数,那么就是中间两个数之和的一半
//* 否则就是中间的数
//*merge
vector<int> result;
int num1_size = nums1.size();
int num2_size = nums2.size();
int i = 0, j = 0;
while (i<num1_size && j<num2_size) {
if (nums1[i] < nums2[j]) {
result.push_back(nums1[i]);
i++;
}
else {
result.push_back(nums2[j]);
j++;
}
}
while (i<num1_size) {
result.push_back(nums1[i]);
i++;
}
while (j < num2_size) {
result.push_back(nums2[j]);
j++;
}
if (result.size() % 2 == 0) {
return (result[result.size() / 2-1] + result[result.size() / 2])/2.0;
}
else {
return result[result.size() / 2.0];
}
}
};
寻找两个有序数组的第K小元素
没理解
:triangular_flag_on_post: TODO
- :question: log(n+m)求两个有序数组的第K大元素