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 duplicate elements.
將兩個陣列進行合併,然後尋找第k小的元素可能非常直觀。合併操作需要花費額外的o(m + n)的空間。線性執行時間已經很好了,但我們還能再做一些優化嗎?
上面的方法可以這樣優化,使用兩個指標,可以無需合併,遍歷兩個陣列,因而不需要額外的空間。兩個指標初始分別指向a和b的頭,每一次將兩個指標指向的數字中較小的那個的指標加一。第k小的數字總計遍歷k次即可獲得。該演算法非常類似於尋找兩個有序陣列交集。
int findkthsmallest1(int a, int b, int m,int n,int k)
}if (b_offset < n)
if (a_offset + b_offset == k) return b[--b_offset];}}
}
int findkthsmallest2(int*a,int *b,int m,int n,int k)
int find(int* a, int* b,int aleft, int aright, int bleft, int bright, int k) else
}//在主函式中判斷k>m+n的情況
兩個有序陣列的第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...
尋找兩個有序陣列中的第K個數或者中位數
假設有長度分為為m和n的兩個公升序陣列a和b,在a和b兩個陣列中查詢第k大的數,即將a和b按公升序合併後的第k個數。解法一 使用兩個指標指向a和b的開頭,很容易在o m n 的時間內完成,此演算法略過。解法二 使用二分的方法。演算法思想在 注釋中 include include include us...
尋找兩個有序陣列的中位數
尋找兩個有序陣列的中位數 user hihone date 2019 1 31 time 16 32 description 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 ...