HJ58 输入n个整数,输出其中最小的k个

116 阅读1分钟

Day15 2023/01/22

题目链接

难度:入门

题目

输入n个整数,找出其中最小的k个整数并按升序输出

本题有多组输入样例

数据范围:1 ≤ n ≤ 1000  ,输入的整数满足:1 ≤ val ≤ 10000 

输入描述:

第一行输入两个整数n和k
第二行输入一个整数数组

输出描述:

从小到大输出最小的k个整数,用空格分开。

示例

输入:5 2
     1 3 5 7 2

输出:1 2

思路


这题比较简单,我们直接将整数数组中的元素进行升序排列(由小到大),然后输出前k个即可,其中排序的方法有很多种,这里使用c++中的sort函数实现排序

关键点


  • sort函数内部的实现是一种经过优化的快速排序,时间复杂度较低。

算法实现


c++代码实现-sort函数

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int n, k; //n为数组长度,k为要寻找的最小整数的数量
    while (cin >> n >> k) {
        int nums[n];
        for (int i = 0; i < n; i++) { //输入数据到数组中
                cin >> nums[i]; 
        }
        sort(nums, nums + n); //数组元素升序排列
        for (int i  = 0; i < k - 1; i++) { //输出前k个元素
            cout << nums[i] << ' ';
        }
    }
    return 0;
}

  • 时间复杂度 O(nlogn)O(nlogn) --- sort函数的时间复杂度为(nlogn)
  • 空间复杂度 o(1)o(1) --- 数组为必要空间,无额外空间

总结

  • 对于排序类的题目推荐使用sort函数。