兩個有序陣列元素之積 和的最小K個值

2021-07-10 22:12:47 字數 732 閱讀 5020

題目來自阿里面試題目 題目

(1)已知a b兩個陣列,元素有序,構造新的集合s= 求s中最小的k個元素,最優解法。

(2)已知a b兩個陣列,元素有序,構造新的集合s= 求s中最小的k個元素,最優解法。

思路:這兩個題本質上屬於同乙個題目,可以使用同乙個思路做。

思路(1) 暴力解決,此時時間複雜度為o(n*m),空間複雜度o(1).

思路(2) 為最短陣列中每乙個元素都指定乙個游標,之後分別於另外乙個陣列中元素結合,求解最小值。

時間複雜度:o(k*min(m,n)),k表示取最小的k個數,m和n表示陣列長度,min(m,n)表示最短陣列。

空間複雜度:o(min(m,n)).

**:

說明:為了簡潔說明思路,**中沒有選擇最短陣列,元素也沒去重

#include #include using namespace std;

void findksmall(int a,int m,int b,int n,int c,int ntopk)

} curpos[curmin]++;

count++;

} for (int i = 0;i < ntopk;i++) }

for(multiset::iterator it = settopk.begin(); it != settopk.end(); ++it)

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...

陣列元素替換 88 合併兩個有序陣列

給你兩個有序整數陣列 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為乙個有序陣列。說明 初始化nums1 和 nums2 的元素數量分別為 m 和 n 你可以假設 nums1有足夠的空間 空間大小大於或等於 m n 來儲存 nums2 中的元素。示例 輸...

歸併兩個有序陣列

題目 有兩個有序的陣列a1和a2,內存在a1的末尾有足夠多的空餘空間容納a2。請實現乙個函式,把a2中的所有數字插入到a1中並且所有的數字是排序的。解法 從後向前依次比較處理,減少移動次數,提高效率。void sorta1a2 int a1,int length1,int sizeofa1,int ...