每日演算法 兩個排序陣列的中位數

2021-08-26 05:30:27 字數 1275 閱讀 1904

題目:

給定兩個大小為 m 和 n 的有序陣列nums1nums2

請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 o(log (m+n)) 。

你可以假設nums1nums2不同時為空。

示例 1:

nums1 = [1, 3]

nums2 = [2]

中位數是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

中位數是 (2 + 3)/2 = 2.5

題目原址:

解題思路分析:

排序之後獲取最中間的數或者最中間的兩個數除以二,返回結果得到中位數。審題發現兩個陣列皆為有序陣列,可以借助歸併排序的合併思路快速排序,然後取出陣列中間的數。

解題**:

public double findmediansortedarrays(int nums1, int nums2) 

// 把左邊剩餘的數移入陣列

while (num1 < length1)

// 把右邊邊剩餘的數移入陣列

while (num2 < length2)

if (num3%2==0)else

}

最終測試通過結果:

大牛演算法分析:

解題**:

public double findmediansortedarrays(int nums1, int nums2) 

int findkth(int nums1, int nums2, int k) else

}

思路分析:

獲取來個陣列的平均長度,在通過平均長度獲取到較長陣列的中間數所在位置-1的元素記為a,短陣列中同樣位置的元素記為b,用a與b比較,選擇a和b中數值小的那個素組,將原陣列從a或者b的地方截去(不保留a或者b),剩下的陣列再次對比,直到一邊陣列為空,返回空陣列最後的乙個元素,或者兩邊都只剩下乙個,返回較小的乙個,返回的元素就是最接近中間的元素。

通過減而治之的思路,逐步排除的掉小於中間數的元素。

兩個排序陣列的中位數

求兩個排序陣列中位數,這道題是很有意思的一道題目,演算法導論中9.3 8題,這題必須在o logn 的時間複雜度求解,否則肯定悲劇。這題有個關鍵的條件,那就是這兩個陣列長度相等 思路如下 陣列a 1,3,5,7,9 陣列b 2,4,6,8,10 首先取二者的中位數,在o 1 時間複雜度內求出,那麼陣...

兩個排序陣列的中位數

求兩個排序陣列中位數,這道題是很有意思的一道題目,演算法導論中9.3 8題,這題必須在o logn 的時間複雜度求解,否則肯定悲劇。這題有個關鍵的條件,那就是這兩個陣列長度相等 思路如下 陣列a 1,3,5,7,9 陣列b 2,4,6,8,10 首先取二者的中位數,在o 1 時間複雜度內求出,那麼陣...

兩個排序陣列的中位數

兩個排序的陣列a和b分別含有m和n個數,找到兩個排序陣列的中位數,要求時間複雜度應為o log m n 給出陣列a 1,2,3,4,5,6 b 2,3,4,5 中位數3.5 給出陣列a 1,2,3 b 4,5 中位數 3 public double findmediansortedarrays in...