給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。
請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。
你可以假設 nums1 和 nums2 不會同時為空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
則中位數是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
則中位數是 (2 + 3)/2 = 2.5
思路:
大體是將兩個陣列分別分成左右兩個部分,兩個左半部分的陣列的值均小於兩個右半陣列的值,且滿足兩個左陣列的元素數目等於兩個右邊陣列元素的數目。這樣就可以求出中位數了,但是陣列元素和可能不是偶數,所以這種思路加上了乙個『#』號來填充陣列,使得陣列元素的數目保持為偶數。但是這道題還算不上很懂,還要多看看,留個鏈結在這裡。
**:
#include #includeusing namespace std;
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
class solution
int lmax1, lmax2, rmin1, rmin2, c1, c2, lo = 0, hi = 2 * n;
//ci為第i個陣列的割,比如c1為2時表示第乙個陣列只有兩個元素。lmaxi為第i個元素割後的左元素。rmini為第
//i個陣列割後的右元素
while (lo<=hi)//二分
return (max(lmax1, lmax2) + min(rmin1, rmin2)) / 2.0;
}};
LeetCode 4 尋找兩個有序陣列的中位數
給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...
LeetCode 4 尋找兩個有序陣列的中位數
給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2 3,...
LeetCode4 尋找兩個有序陣列的中位數
給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2 3,...