題目:
給定兩個大小為 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
題目原址:
解題思路分析:
排序之後獲取最中間的數或者最中間的兩個數除以二,返回結果得到中位數。審題發現兩個陣列皆為有序陣列,可以借助歸併排序的合併思路快速排序,然後取出陣列中間的數。
解題**:
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...