北邮复试_2010_查找k小含有相同元素

题目描述

查找一个数组的第K小的数,注意同样大小算一样大
如 2 1 3 4 5 2 第三小数为3
如(括号内容为注释)
输入:
6(数组长度n)
2 1 3 5 2 2(数组)
3(K 即为第三小数)
输出:
3

分析:先排序再按照pre判断是否当前比较的元素相同

void find_k()
    {
        int n;
        cin >> n;
        vector<int> nums;
        if (n == 0)
        {
            return;
        }
        int t;
        for (int i = 0; i < n; i++)
        {
            cin >> t;
            nums.push_back(t);
        }
        sort(nums.begin(), nums.end());
        int k;
        cin >> k;
        t = 1;
        int i = 1;
        int pre = nums[0];
        while (i < nums.size() && t < k)
        {
            if (pre != nums[i])
            {
                t++;
                pre = nums[i];
            }
            i++;
        }
        if (t == k)
        {
            cout << nums[i - 1] << endl;
        }
        else
        {
            cout << 0 << endl;
        }
    }
发布了63 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/luncy_yuan/article/details/104328315