Question
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
关键词:数组 排序
Solution
这题主要考察排序,包括快排、归并等基本排序,最优解应该是最大堆排序(O(Nlog(k)))。
暴力破解-sort
时间复杂度:O(Nlog(N))
空间复杂度:O(1)
- Python
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
tinput = sorted(tinput)
if k<=len(tinput):
return tinput[:k]
else:
return []
- C++
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> ans;
if(k==0 || k>input.size())
return ans;
sort(input.begin(), input.end());
for(int i=0;i<k;i++)
ans.push_back(input[i]);
return ans;
}
};
最小数组sort
时间复杂度:O(N·Klog(K))
空间复杂度:O(K)
- Python
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
min_k = []
if k==0 or k>len(tinput):
return min_k
for i in tinput:
if len(min_k) < k:
min_k.append(i)
else:
min_k = sorted(min_k)
if i<min_k[-1]:
min_k[-1] = i
return sorted(min_k)
- C++
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> ans;
if(k==0 || k>input.size())
return ans;
for(int i=0;i<input.size();i++){
if (ans.size()<k)
ans.push_back(input[i]);
else{
sort(ans.begin(), ans.end());
if(input[i] < ans[k-1])
ans[k-1] = input[i];
}
}
sort(ans.begin(), ans.end());
return ans;
}