尋找兩個有序陣列中的第K個數或者中位數

2021-06-10 06:19:10 字數 758 閱讀 6906

假設有長度分為為m和n的兩個公升序陣列a和b,在a和b兩個陣列中查詢第k大的數,即將a和b按公升序合併後的第k個數。

解法一:

使用兩個指標指向a和b的開頭,很容易在o(m+n)的時間內完成,此演算法略過。

解法二:

使用二分的方法。演算法思想在**注釋中

#include #include #include using namespace std;

//notice : k > 0

int findkthelm(int a, int abeg, int aend, int b, int bbeg, int bend, int k)

if (bbeg > bend)

//取中間位置

int amid = abeg + (aend - abeg)/2;

int bmid = bbeg + (bend - bbeg)/2;

//從a和b的開始位置到兩個陣列中間位置的元素個數

int halflen = amid - abeg + bmid - bbeg + 2;

if (a[amid] < b[bmid])

else

}else

else

}}int main()

else if (bpos >= blen)

else

else

} }

//輸出a和b的內容

for (int i = 0; i < alen; ++i)

{ cout <

兩個有序陣列的第k大數

coding utf 8 兩有序陣列的第k大 一種思路是用o m n 的空間複雜度,然後時間複雜度的話只需要o k 吧,就是從後往前掃k個就ok了 另一就是不需要額外的空復,然後時復o log m n 遞迴 a 19,11,8,7,4,2,0 b 13,8,6,3,1 k 4 m,n len a l...

4 兩個有序陣列中第k小的數

參考 求兩個有序陣列中第k個元素。要求時間複雜度o log m n 空間複雜度o 1 def median num1,num2,k len1,len2 len num1 len num2 if len1 len2 k 首先得檢查合法行啊 return 1 index1,index2 0,0 whil...

從兩個有序陣列的並集中尋找第k小元素

given two sorted arrays a,b of size m and n respectively.find the k th smallest element in the union of a and b.you can assume that there are no dupli...