leetcode 尋找兩個正序陣列的中位數

2021-10-10 04:33:18 字數 913 閱讀 2697

給定兩個大小為 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大的元素。

我們設x = k/2 - 1, 現在比較nums1[x] 與 nums2[x]的大小關係

用兩個指標分別記錄兩個陣列的偏移量,每次移動記錄偏移位置,並更新k的值,注意邊界即可。

時間複雜度:o(log(n + m)) 空間複雜度:o(1)

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