尋找兩個正序陣列的中位數 二分法學習

2021-10-06 12:59:14 字數 1496 閱讀 5512

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

題目要求演算法的時間複雜度為 o(log(m + n)),如果對時間複雜度的要求有log,通常都需要用到二分查詢

題目的具體詳細解法可以去看官方解法,我的解法也是按照那個思路解的。

}如果有n個元素,每次找其中點,就是除以1/2,直到等於1。

用數學表示式就是

得k=logn。

思想:假設資料是按公升序排序的,對於給定值key,從序列的中間位置k開始比較,

如果當前位置arr[k]值等於key,則查詢成功;

若key小於當前位置值arr[k],則在數列的前半段中查詢,arr[low,mid-1];

若key大於當前位置值arr[k],則在數列的後半段中繼續查詢arr[mid+1,high],

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

力扣 尋找兩個正序陣列的中位數 hard 如下圖所示,中位數必然滿足這樣的分割線,將兩個陣列分別分為兩個部分,最終組成四個部分,分別為t1 left,t1 right,t2 left,t2 right,其中t1代表第乙個陣列,t2代表第二個陣列,left 代表分割線左邊的部分,right 代表分割線...

尋找兩個正序陣列的中位數 二分查詢4

一.無腦傻瓜版本 沒看答案 1.把兩個陣列合併成乙個陣列並排序 2.找到新陣列的中位數。class solution def findmediansortedarrays self,nums1,nums2 ls list for i in nums1 for j in nums2 ls.sort n...

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

尋找兩個正序陣列的中位數 二分法根據中位數的定義,當 m n 是奇數時,中位數是兩個有序陣列中的第 m n 2 個元素,當 m n 是偶數時,中位數是兩個有序陣列中的第 m n 2 個元素和第 m n 2 1 個元素的平均值。因此,這道題可以轉化成尋找兩個有序陣列中的第 k 小的數,其中 k 為 m...