题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
解题思路
因为牛客网这里对时间复杂度这里没什么要求,不像leetcode要求那么严格,本来我是想把整个数组按照复杂度排序,然后取前k个数。排序肯定是按照排序算法来的,冒泡排序(一趟)就是选出最大或最小的数,正巧这道解题关键就在冒泡排序。
我遇到的问题
- 之前用冒泡排序都是按从小大大排的,这次要取最小的数,自然是按照从大到小排,从第一个数开始,一次比较,遇到比它大的数就交换,这样正好能选出最小的数
- 调试的过程有一道测试用例是当要选出的数小于数组的长度,返回空,要特别注意这种情况
源代码
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
vector<int> result;
int n=input.size();
if(n<k)
return result;
for(int i=0;i<k;i++){
for(int j=0;j<n;j++){
if(input[j+1]>input[j]){
int tmp=input[j];
input[j]=input[j+1];
input[j+1]=tmp;
}
}
result.push_back(input[n-1-i]);
}
return result;
}
};