575. Distribute Candies
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].
这道题给出一个偶数长度的数列,其中的数组长度代表糖果数,其中的数代表不同种类的糖果,要求把糖果分给弟弟妹妹,求妹妹能分到最多的糖果种类有多少?这个题比较简单,对于长度是2n的数组,妹妹可以获得n个糖果,如果糖果种类m小于n ,则其必然能获得m种糖果。如果m大于等于n,则其最多是在m种糖果里选择n种获得。所以妹妹最多可以获得min(m,n)种糖果。
class Solution {
public:
int distributeCandies(vector<int>& candies) {
map<int, int> ma;
int n = candies.size();
if (n == 0) return 0;
for (int i = 0; i < n; i++) {
ma[candies[i]] = 1;
}
int m = ma.size();
return min(m, n / 2);
}
};