其他分享
首页 > 其他分享> > [leetcode]575. 分糖果

[leetcode]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],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。

注意:

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

思路:
题目规定糖果的数量n为偶数,因此一定可以将糖果平均分成两份,每份固定数量为n/2。

假设糖果种类为m,那么单份中可使糖果种类数量最大为min(m,n/2)。

当m>n/2,糖果种类大于单份的糖果数量。此时可以从m类糖果中找出n/2类不同的糖果组成单份,此时可取得的最大种类数为n/2.
当m=n/2,刚好可以找出n/2类糖果组成单份,此时可取最大种类为n/2
当m<n/2,糖果种类小于n/2类,则可以得到的最大种类即为m。

AC代码:(C++)

class Solution {
   public:
    int distributeCandies(vector<int>& candyType) {
        unordered_set<int> ans;
        int max = candyType.size() / 2;
        for (int x : candyType) {
            if (ans.find(x) == ans.end()) ans.emplace(x);
            if (ans.size() >= max) return max;
        }
        return ans.size();
    }
};

标签:单份,candyType,575,妹妹,ans,糖果,leetcode,种类
来源: https://blog.csdn.net/weixin_44699689/article/details/121080045