LeetCode4 尋找兩個有序陣列的中位數

2021-10-01 21:20:21 字數 950 閱讀 1349

給定兩個大小為 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,...