這個解法看了好久,直到看了這篇文章才恍然大悟
誤區主要在以下兩點
明確兩個概念:通過虛擬加入#符號,讓陣列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,...