小明和完美序列——map

发布时间:2024年01月18日

由完美序列的定义可以知道,序列中每个数字的个数,要么是等于它本身,要么就是一个没有。

如果一个数字出现的次数比它本身大,我们就选择删掉多出的,

这样肯定比完全删除是更优的,只有在当一个数字出现的次数小于它本身的时候,这种情况,我们不得不选择全部删除。

所以解决这个问题,只要统计每个数字出现的次数就可以了。由于数字的范围最大有?10^9?,所以我们用一个?map?统计

?

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;//由于数字的范围最大有 10^9

signed main()
{
    int n; cin >> n;
    vector<int> a(n + 1);//定义vector数组, 容量为n+1
    map<int, int> cnt;
    //输入
    for(int i = 1; i <= n; i ++) {
        cin >> a[i];
        cnt[a[i]] ++;
    }
    int ans = 0;
    for(auto [x, y] : cnt)
   {
      //出现的次数>数字本身,删除掉多余的,直到等于数字本身为止.
        if(y > x) ans += y - x;//算出要删除的次数,删除y-x次
      else if(y < x) ans += y;//如果比数字小,则全删除,删除y次
    }
    cout << ans;
}

文章来源:https://blog.csdn.net/2201_75733666/article/details/135671574
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。