题目
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
来源:力扣(LeetCode)
分析
此题的解决关键是正确统计出糖果类型数。
思路:将糖果类型数值变为非负数后作为新数组下标
具体步骤看源代码。
代码
int distributeCandies(int* candies, int candiesSize){
//添加一个数组变量arr,数组值均初始化为0
int i, arr[200001]={0}, k = 0, havezieo = 0;
int max = candiesSize / 2;//最大糖果类型数
for(i = 0; i < candiesSize; i++){//循环数组,将数组值变成非负数(+10000)后作为下标
if(arr[candies[i] + 100000] == 0){//相关数组值是0时
if(candies[i] == 0){//存在糖果类型值为0时只标记,不加类型值
havezieo = 1;
continue;
}
//非0时加类型值并改变对应数组值
arr[candies[i]+100000] = candies[i];
k++;
}
}
if(havezieo == 1){//循环结束,由标记值判断“0”存在与否,存在则类型值+1
k++;
}
if(max <= k){//若种类数大于等于妹妹得到的最大种类数,则返回max
return max;
}
return k;//否则返回k
}