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

2021-10-03 16:46:51 字數 771 閱讀 1974

這個解法看了好久,直到看了這篇文章才恍然大悟

誤區主要在以下兩點

明確兩個概念:通過虛擬加入#符號,讓陣列a的長度變為2n+1,陣列b的長度變為2m+1,這樣兩個陣列合併後的長度為2(n+m)+2恆定為偶數。注意這裡是虛擬加入#,並沒有在記憶體中再開闢兩個新的陣列,通過一定的轉換,我們可以保證虛擬加入#後每個元素跟原來的元素一一對應

如果割在#等於割在兩個數之間,如果割在數字上等於把數字劃到兩個部分

class

solution

// ci 為第i個陣列的割,比如c1為2時表示第1個陣列只有2個元素。lmaxi為第i個陣列割後的左元素。rmini為第i個陣列割後的右元素。

int lmax1, lmax2, rmin1, rmin2, c1, c2, lo =

0, hi =

2* nums1size;

//我們目前是虛擬加了'#'所以陣列1是2*n長度

while

(lo <= hi)

else

if(lmax2 > rmin1)

else

}return

(max

(lmax1, lmax2)

+min

(rmin1, rmin2))/

2.0;}}

;234/

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,...