饿了么笔试0822 第二题题解
##饿了么笔试###笔试#
#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int a[N],n,cnt[N],idx,ans;
int main() {
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],cnt[a[i]]++,idx = max(idx,a[i]);
for(int i=1;i<idx;i++) if(cnt[i]%2) ans++;
ans = ans/2+ans%2,cout<<ans;
}
其实用桶计数,计算出每种数出现的个数
那么出现了偶数次的是不用操作的,然后计算除了最大值以外有几种数出现了奇数次
比如说有:3个1,5个2
那么把其中的1变成2就能同时让两个出现奇数次的数变成偶数次,最后再把剩下的那个数变成最大值就行
#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int a[N],n,cnt[N],idx,ans;
int main() {
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],cnt[a[i]]++,idx = max(idx,a[i]);
for(int i=1;i<idx;i++) if(cnt[i]%2) ans++;
ans = ans/2+ans%2,cout<<ans;
}
其实用桶计数,计算出每种数出现的个数
那么出现了偶数次的是不用操作的,然后计算除了最大值以外有几种数出现了奇数次
比如说有:3个1,5个2
那么把其中的1变成2就能同时让两个出现奇数次的数变成偶数次,最后再把剩下的那个数变成最大值就行
全部评论
😯也是这个做法但是只过了75
相关推荐
08-21 17:27
武汉理工大学 golang 点赞 评论 收藏
分享