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