題目:
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。注意:沒有k個時不輸出。
思路:主要就是快排和堆排序,快排簡單,速度快。 但是堆的好處就是可以處理海量資料的時候,不用把所有點都放入記憶體中,每次乙個乙個的讀取就可以了。
先看快排的,快排不需要全排完,只要找到第k個位置就可以輸出前面的數就行了
class solution else
while(input[i]getleastnumbers_solution(vectorinput, int k)
if(right<=len&&heap[flag] < heap[right])
if(flag == m) else
}void buildheap(vector&heap)
}void heapsort(vector&heap,int len) else
}vectorgetleastnumbers_solution(vector&input, int k)
buildheap(a);
for(int i = k; i < input.size(); i++) else
}a.erase(a.begin());
return a;
}};
最小的K個數
問題描述 給定的n個整數,計算其中最小的k個數。最直觀的解法莫過於將n個數按公升序排列後輸出前k個。但是就效率來看,這種方法並不是最理想的。一種改進方法是借助快速排序中對陣列的劃分,以第k個元素對陣列進行劃分,使得比第k個數字小的數字都在其左邊,比其大的數字都在它的右邊。void swap int ...
最小的K個數
從 陣列中出現次數超過一半的數字 得到啟發,同樣可以基於partition函式來解決。一 o n 演算法 void getleastnumbers int input,int n,int output,int k else for int i 0 i k i output i input i 二 o...
最小的K個數
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,如果不讓使用sort的話,自己實現乙個,或者依次選取最小的 class solution public vectorgetleastnumbers solution vectori...