1.题目
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
2.思路
建立map存放不同类型的糖果,得出map长度即可
3.代码
int distributeCandies(vector<int>& candies){
map<int,int>mp;
for(int i=0;i<candies.size();i++){
mp[candies[i]]=1;
}
int sum=mp.size();
if(sum>candies.size()/2)
return candies.size()/2;
else
return sum;
}
4.优秀案例
class Solution {
public:
int distributeCandies(vector<int>& candies) {
if(candies.size()<1)
return 0;
bool kinds[200005] = {0};
int kindnum = 0;
for(int i = 0; i<candies.size(); i++){
int idx = candies[i] + 100000;
if(!kinds[idx]){
kinds[idx] = 1;
kindnum ++;
}
}
if(kindnum >= candies.size()/2)
return candies.size()/2;
return kindnum;
}
};