求兩個有序陣列的上中位數O logN

2021-09-24 05:47:34 字數 1025 閱讀 3354

【題】

【思路】根據中間值比較,二分 然後…二分…直到最終只有兩個值,拿到小的那個就行。

【通過具體例子分析】

int findprocess(vectorarr1, int start1, int end1, vectorarr2,  int start2, int end2)//只有乙個元素

int check = ((end1 - start1 + 1) & 1) ^ 1;//判斷陣列元素是奇數還是偶數個 元素為偶數時 值是1 表示捨棄mid2位置 元素為奇數時 值為0 表示mid2位置要保留

int mid1 = (start1 + end1) / 2;

int mid2 = (start2 + end2) / 2;

if (arr1[mid1] > arr2[mid2]) return findprocess(arr1, start1, mid1, arr2, mid2 + check, end2);

else if (arr1[mid1] < arr2[mid2]) return findprocess(arr1, mid1 + check, end1, arr2, start2, mid2);

else return arr1[mid1];

}int getmidnum(vectorarr1, vectorarr2)

return findprocess(arr1, 0, arr1.size() - 1, arr2, 0, arr2.size() - 1);

}

以上即為求解兩個等長有序陣列上中位數的o(longn)方

求兩個有序陣列的中位數

要求 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 例如 nums1 1,3 nums2 2 則中位數是 2.0 nums1 1,2 nums2 3,4 則中位數是 2 3 2 2.5 演算法解析...

求兩個有序陣列的中位數

原部落格 設陣列a的長度為m,陣列b的長度為n,兩個陣列都都是遞增有序的。求這兩個陣列的中位數 首先我們看看中位數的特點,乙個大小為n的陣列,如果n是奇數,則中位數只有乙個,陣列中恰好有 n 1 2 個元素比中位數小。如果n是偶數,則中位數有兩個 下中位數和上中位數 這裡我們只求下中位數,對於下中位...

兩個有序陣列中位數

大小m和n分別有兩個排序陣列a和b。找到兩個排序陣列的中值。總的執行時間複雜度應該是o log m n class solution return findkth a,b,0,0,m,n,s 2 findkth a,b,0,0,m,n,s 2 1 2 private double findkth v...