题目:
Alice 有 n 枚糖,其中第 i 枚糖的类型为 candies[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。
医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。
给你一个长度为 n 的整数数组 candies ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的最多种类数。
分析:
我们可以对给定的 candies数组进行排序,并通过比较排序数组的相邻元素来找出唯一的元素。对于找到的每个新元素(与前一个元素不同),我们需要更新 count。最后,我们可以将所需结果返回为 (n/2, count)。
代码如下:
public class Solution {
public int distributeCandies(int[] candies) {
Arrays.sort(candies);
int count = 1;
for (int i = 1; i < candies.length && count < candies.length / 2; i++)
if (candies[i] > candies[i - 1])
count++;
return count;
}
}
第一种方法比较简单,也可以用HashSet做,通过找到唯一元素数量的另一种方法是遍历给定数组的所有元素,并继续将元素放入集合中。通过集合的属性,它将只包含唯一的元素。最后,我们可以计算集合中元素的数量,例如count。要返回的值将再次由min(count,n/2) 给出,如前面的方法所述。其中 n 表示 数组的大小。
代码:
public class Solution {
public int distributeCandies(int[] candies) {
HashSet < Integer > set = new HashSet < > ();
for (int candy: candies) {
set.add(candy);
}
return Math.min(set.size(), candies.length / 2);
}
}
get!