#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;
typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pl> vpl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
void solve(){
int n;
cin>>n;
map<int,int> mp;
for(int i=0;i<n;i++){
int a;
cin>>a;
mp[a]++;
}
int last_cnt=0;
int last_val=2e9;
int ans=0;
for(auto it:mp){
int cur_val=it.first;
int cur_cnt=it.second;
if(cur_val==(last_val+1)){
if(cur_cnt>last_cnt){
ans+=cur_cnt-last_cnt;
}
}else{
ans+=cur_cnt;
}
last_cnt=cur_cnt;
last_val=cur_val;
}
cout<<ans<<'\n';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
这道题还是挺有难度的,对于我这个新手来说。
一开始我以为只需要对数组排个序就出来了,对于1 1 1 1 2 2 2 2这个数组最小是4次,排完序,看a[i]==a[i-1]+1如果不相等ans++,结果不对。想的还是简单了,我想如果有一个数据结构能反映出来,每个数出现的次数这道题也就出来,于是想到map, 对于,map的操作如果掌握的好的话就出来了,我就是掌握不太好的,遇到的问题分享给大家
1.it++!=it+1这居然是我今天才知道
2.it++之后一定要先检验是否越界,可以利用if短路特性
3.map掌握不好,就无法专注与思维的层面,导致报很多低级错误(疑似被报错给整懵了)

京公网安备 11010502036488号