思路:开两个数组,一个用来存储非负数的糖果个数,一个用来存储负数的糖果个数,这两个数组都是状态数组,而不是计数数组
如果当前能够吃的种类大于现有的种类,现有的种类个数就是答案;
如果当前能够吃的种类小于等于现有的种类,则只能限制在能够吃的种类个数。
上代码:
class Solution {
public:
int distributeCandies(vector<int>& candyType) {
int n=candyType.size();
vector<bool>st1(100010,false);
vector<bool>st2(100010,false);
int chi=n/2;
int target=0;
for(int i=0;i<n;i++){
if(candyType[i]<0){
st2[abs(candyType[i])]=true;
}
else{
st1[candyType[i]]=true;
}
}
for(int i=0;i<100010;i++){
if(st1[i])
target++;
if(st2[i])
target++;
}
if(chi>=target)
return target;
else
return chi;
}
};