1.题目
Given an integer array with
even length, where different numbers in this array represent different
kinds of candies. Each number means one candy of the corresponding kind. You need to distribute these candies
equally in number to brother and sister. Return the maximum number of
kinds of candies the sister could gain.
Example 1:
Input: candies = [1,1,2,2,3,3] Output: 3 Explanation: There are three different kinds of candies (1, 2 and 3), and two candies for each kind. Optimal distribution: The sister has candies [1,2,3] and the brother has candies [1,2,3], too. The sister has three different kinds of candies.
Example 2:
Input: candies = [1,1,2,3] Output: 2 Explanation: For example, the sister has candies [2,3] and the brother has candies [1,1]. The sister has two different kinds of candies, the brother has only one kind of candies.
Note:
- The length of the given array is in range [2, 10,000], and will be even.
- The number in given array is in range [-100,000, 100,000].
2.思路
先计遍历数组,总共有几类蜡烛,我用了一个HashSet进行记录。妹妹能得到的最多种类数,由数组的长度和hashSet的大小共同决定,她将得到 数组长度1/2 和 hashSet大小中的较小值。
3.算法
class Solution {
public int distributeCandies(int[] candies) {
HashSet set=new HashSet();
for(int i=0;i<candies.length;i++){
if(!set.contains(candies[i])){
set.add(candies[i]);
}
}
return candies.length/2<set.size()?candies.length/2:set.size();
}
}
4.总结
比较简单。注意length和length()的区别。