假設有長度分為為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...