給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。
請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。
你可以假設 nums1 和 nums2 不會同時為空。
首先假設兩個陣列大小分別為n和m,如果(n + m)為奇數的話我們需要找到第(n + m + 1) / 2個元素;如果(n + m)為偶數的話我們需要找到第(n + m) / 2 和 (n + m) / 2 + 1個元素,現在我們定義乙個函式來找到兩個陣列中第k大的元素。時間複雜度:o(log(n + m)) 空間複雜度:o(1)我們設x = k/2 - 1, 現在比較nums1[x] 與 nums2[x]的大小關係
用兩個指標分別記錄兩個陣列的偏移量,每次移動記錄偏移位置,並更新k的值,注意邊界即可。
class
solution
else
if(nums1[id1]
> nums2[id2])}
return
min(nums1[px]
, nums2[py]);
}double
findmediansortedarrays
(vector<
int>
& nums1, vector<
int>
& nums2)
return
1.0*
(get_kth
(nums1, nums2,
(n + m)
>>1)
+get_kth
(nums1, nums2,
(n + m)/2
+1))
/2;}
};
LeetCode 尋找兩個正序陣列的中位數
尋找兩個正序陣列的中位數 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 ...
LeetCode004 尋找兩個正序陣列的中位數
給定兩個大小為 m 和 n 的正序 從小到大 陣列nums1和nums2。請你找出並返回這兩個正序陣列的中位數。輸入 nums1 1,3 nums2 2 輸出 2.00000解釋 合併陣列 1,2,3 中位數 2輸入 nums1 1,2 nums2 3,4 輸出 2.50000 解釋 合併陣列 1,...
leetcode每日一練 尋找兩個正序陣列的中位數
leetcode每日一練 尋找兩個正序陣列的中位數 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數。例 1 nums1 1,2 nums2 3 則中位數是 2.0 示例 2 nums1 1,2,3 nums2 4,5,6 則中位數是 3...