Alice has n
candies, where the ith
candy is of type candyType[i]
. Alice noticed that she started to gain weight, so she visited a doctor.
The doctor advised Alice to only eat n / 2
of the candies she has (n
is always even). Alice likes her candies very much, and she wants to eat the maximum number of different types of candies while still following the doctor's advice.
Given the integer array candyType
of length n
, return the maximum number of different types of candies she can eat if she only eats n / 2
of them.
Example 1:
Input: candyType = [1,1,2,2,3,3] Output: 3 Explanation: Alice can only eat 6 / 2 = 3 candies. Since there are only 3 types, she can eat one of each type.
Example 2:
Input: candyType = [1,1,2,3] Output: 2 Explanation: Alice can only eat 4 / 2 = 2 candies. Whether she eats types [1,2], [1,3], or [2,3], she still can only eat 2 different types.
Example 3:
Input: candyType = [6,6,6,6] Output: 1 Explanation: Alice can only eat 4 / 2 = 2 candies. Even though she can eat 2 candies, she only has 1 type.
Constraints:
n == candyType.length
2 <= n <= 104
n
is even.-105 <= candyType[i] <= 105
题目描述的太复杂了……就是求这个数组里unique元素的个数,和数组长度/2做比较……往set里一放求unique元素个数就行。O(n)时空复杂度。如果不能用set非要手写,那就排个序然后做比较,O(nlogn)。真没啥意思……
Runtime: 80 ms, faster than 24.27% of Java online submissions for Distribute Candies.
Memory Usage: 105.8 MB, less than 61.29% of Java online submissions for Distribute Candies.
class Solution {
public int distributeCandies(int[] candyType) {
int maxCandy = candyType.length / 2;
Set<Integer> type = new HashSet<>();
for (int i : candyType) {
type.add(i);
}
return Math.min(type.size(), maxCandy);
}
}