(洛谷)题目题号P1138 第 k 小整数

Hello 大家好我是小亦,今天又来更新题解了哈哈,一天要更2、3呢,今天的题目很简单难度为(普及-)非常简单,适合新手来写话不多说思路qwq:

这道题使用模拟和排序做的非常基础下面为思路点

  1. 读取输入:首先读取n和k的值,然后读取n个正整数。

  2. 排序:将读取的正整数排序。

  3. 去重:由于相同大小的整数只计算一次,我们需要去除排序后数组中的重复元素。

  4. 查找第k个最小整数:遍历去重后的数组,找到第k个元素。

  5. 输出结果:如果找到了第k个元素,输出它的值;如果没有找到(即k值大于去重后数组的长度),则输出"NO RESULT"。

  6. Ok,说完了如果还不懂的可以私信(指新手qwq)话不多说上代码

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int n, k;
        cin >> n >> k;
        vector<int> nums(n);
        for (int i = 0; i < n; ++i) {
            cin >> nums[i];
        }
    
        // 排序
        sort(nums.begin(), nums.end());
    
        // 去重
        vector<int> unique_nums;
        unique_nums.push_back(nums[0]);
        for (int i = 1; i < n; ++i) {
            if (nums[i] != nums[i - 1]) {
                unique_nums.push_back(nums[i]);
            }
        }
    
        // 查找第k个最小整数
        if (k > 0 && k <= unique_nums.size()) {
            cout << unique_nums[k - 1] << endl;
        } else {
            cout << "NO RESULT" << endl;
        }
    
        return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值