LeetCode-Day63(C++) 575. 分糖果

575. 分糖果

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

示例 1:

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

示例 2 :

输入: candies = [1,1,2,3]
输出: 2
解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。

注意:

  1. 数组的长度为[2, 10,000],并且确定为偶数。
  2. 数组中数字的大小在范围[-100,000, 100,000]内。

女孩能得到的唯一糖果的最大数量可以是 n/2,其中 nn 是指糖果的数量。此外,如果独特的糖果数量低于 n/2 的话,为了使女孩能得到的独特的糖果数量最大化,我们会将所有独特的糖果分配给女孩。因此,在这种情况下,女孩得到的独特糖果数量等于给定 candiescandies 数组中的独特糖果总数。

我们可以对给定的 candiescandies 数组进行排序,并通过比较排序数组的相邻元素来找出唯一的元素。对于找到的每个新元素(与前一个元素不同),我们需要更新 count。最后,我们可以将所需结果返回为 min(n/2,count),如前面的方法所述。

class Solution {
public:
    int distributeCandies(vector& candyType) {
        sort(candyType.begin(), candyType.end());
        int count = 1;
        for (int i = 1; i < candyType.size() && count < candyType.size() / 2; i++) {
            if(candyType[i] > candyType[i - 1]) count++;
        }
        return count;
    }
};

找到唯一元素数量的另一种方法是遍历给定 candiescandies 数组的所有元素,并继续将元素放入集合中。通过集合的属性,它将只包含唯一的元素。最后,我们可以计算集合中元素的数量,例如 countcount。要返回的值将再次由 \text{min}(count, n/2)min(count,n/2) 给出,如前面的方法所述。其中 nn 表示 candiescandies 数组的大小。

class Solution {
public:
    int distributeCandies(vector& candies) {
        unordered_set Set;
        for (auto i:candies)
            Set.insert(i);
        return min(Set.size(), candies.size() / 2);
    }
};

你可能感兴趣的:(LeetCode-Day63(C++) 575. 分糖果)