题目描述

给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。

输入 : candies = [1, 1, 2, 2, 3, 3]
输出 : 3
解析 : 一共有三种种类的糖果,每一种都有两个。
最优分配方案:妹妹获得[1, 2, 3], 弟弟也获得[1, 2, 3]。这样使妹妹获得糖果的种类数最多。

思路:
弟弟妹妹所分得糖果的数量都是candyType.size()/2
通过set去重得到糖果的种类数
如果糖是各种各样的都有,种类数大于糖果数量的一半,那妹妹也只能拿到一半的糖果
如果糖果重复的比较多,种类数种类数小于糖果数量的一半,那妹妹尽可能的把所有种类都拿到,也就是set的个数

class Solution {
public:
    int distributeCandies(vector<int>& candyType) {
        set<int> myset;
        for (auto i : candyType)
            myset.insert(i);
        return (myset.size() < candyType.size() / 2) ? myset.size() : candyType.size() / 2;
    }
};