算法刚刚开始学,现在还是先只做leetcode上难度简单的题,等把算法笔记和左神的课吃透了或者学到对应章节再做点进阶题。
Alice 有 n
枚糖,其中第 i
枚糖的类型为 candyType[i]
。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。
医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2
即可(n
是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。
给你一个长度为 n
的整数数组 candyType
,返回: Alice 在仅吃掉 n / 2
枚糖的情况下,可以吃到糖的 最多 种类数。
int distributeCandies(int* candyType, int candyTypeSize) {
int isrepeat=0;
int i,j,k=0;
int types=candyTypeSize;
for(i=0;i<candyTypeSize;i++){
for(j=0,isrepeat=0;j<i;j++){
if(candyType[j]==candyType[i]){
isrepeat++;
//printf("%d %d\n",j,isrepeat);
}
}
if(isrepeat!=0){
types--;
}
}
if(candyTypeSize/2>=types){
return types;
}else{
return candyTypeSize/2;
}
}
额....这个超出时间限制了
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int distributeCandies(int* candies, int candiesSize){
int cnt = 1;
qsort(candies, candiesSize, sizeof(int), cmp);
for (int i = 1; i < candiesSize; i++) {
if (candies[i] > candies[i - 1]) {
cnt++;
}
}
return cnt < candiesSize / 2 ? cnt : candiesSize / 2;
}
用哈希表做