当前位置 博文首页 > 可惜浅灰的博客:去重函数unique应用:洛谷P1138 第k小整数

    可惜浅灰的博客:去重函数unique应用:洛谷P1138 第k小整数

    作者:[db:作者] 时间:2021-09-05 19:09

    题目描述:

    ? ??现有n个正整数,n≤10000,要求出这n个正整数中的第k个最小整数(相同大小的整数只计算一次),k≤1000,正整数均小于30000。

    ? ? 输入:第一行为nn和kk; 第二行开始为nn个正整数的值,整数间用空格隔开。

    ? ? 输出:第kk个最小整数的值;若无解,则输出“NO RESULT”。

    解题思路:

    ? ? ? 显然输入是个一维串,但是题目中有说明:相同值的元素只能算一次,所以需要把相同值的元素只保留一个,剩下的去掉,使用去重函数unique;

    ? ? ? 去重函数只能去掉相邻的同值元素,使用unique必须先排序、再去重。去重后返回的指针,是去重后数组的尾指针,要用clear或者resize把该指针后面的重复元素截掉。

    ? ? ? 去重完毕后,按照输入的k找到k-1下标对应的元素即可

    代码实现:

    #include <iostream>
    using namespace std;
    #include <vector>
    #include <algorithm>
    
    vector<int> v;
    
    int main()
    {
        int n = 0, k = 0;
        int temp = 0;
        cin >> n >> k;
        for (int i = 0; i < n; i++)
        {
            cin >> temp;
            v.push_back(temp);
        }
        sort(v.begin(), v.end());
        auto unique_end = unique(v.begin(), v.end());
        v.resize(unique_end - v.begin());
        
        if (k > v.size())
        {
            cout << "NO RESULT" << endl;
        }
        else
        {
            cout << v[k - 1] << endl;
        }
    
        return 0;
    }

    cs
    下一篇:没有了