问题:小明和完美序列 C++枚举——>使用map解决

2a48a0888e5a43d5ac5e83a2448f5c34.png

bd89c30e11c843bca0ba92800ed31a25.png 

 

代码如下:

//方法一:使用map<int,int>,注意这里和map<int,vector<int>>不同,其中vector是容器(向量)

//关于插入补充:map使用insert(插入一对),priority_queue使用push,vector使用push_back插入值

//思想:map的key唯一-->记录有哪些数字,map的value不唯一并且与key关联-->装下数字用于计数

#include<bits/stdc++.h>

using namespace std;

const int N=1e5+9;int a[N];

int main()

{

int n;cin>>n;

map<int,int> mymap;

int deletenumber=0;//记录要删除的数

//举例:11 222 333 4444 5,其中1和2都多了一个,删除一个1和2,其中3和4正好不用管,5少了,全删

for(int i=1;i<=n;++i)

{ cin>>a[i];//没有定义容器,找一个数组 遍历装入输入的每个数

mymap[a[i]]++;}//每遍历一个a[i],对应key为a[i]的value就加1,value记录每个key对应的数字个数

//由于这里的value不是容器,无法装入很多数字,这里value用于计数

//使用auto自动变量或者迭代器遍历mymap

//count别乱用:mymap.count(3)表示记录"为3的key"有几个,要么1(存在),要么0(不存在),key唯一

//不能用pair.second.count()记录value装入的值个数,这里没有定义容器

for(auto pair:mymap)

{

int num=pair.second;//value++记录了数字个数(初试默认value为空)

if(pair.first<num)//该数字小于该数字存在的数量 如:1,2

deletenumber+=num-pair.first;

else if(pair.first>num)//该数字大于该数字存在的数量 如:5

deletenumber+=num;

}

cout<<deletenumber<<endl;

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值