575. 分糖果

Posted cocobear9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。

链接:https://leetcode-cn.com/problems/distribute-candies
思路:

//如果最大种类数x比糖果数的一半小,则妹妹能得到的糖果种类就为最大种类数x。如果最大种类数比糖果数的一半大,
//即使有这么多类,妹妹也只能得到糖果数的一半。那么此时最多的种类就是她每种拿一个,即个数是糖果总数的一半。

方法一:哈希表

public static int distributeCandies(int[] candies) {
        Set<Integer> set  = new HashSet<>();
        for(int i:candies) {
            set.add(i);
        }
        return Math.min(set.size(), candies.length/2); 
        
    }

方法二:排序

public static int distributeCandies2(int[] candies) {
        //先给数组排序,如1,1,2,2,3,4 ,5,6
        Arrays.sort(candies);
        int ans=1;
        for(int i=1;i<candies.length;i++) {
            if(candies[i]!=candies[i-1]) {
                ans++;
                if(ans==candies.length/2)
                    return ans;
            }
            
        }
        return ans;
        
    }

 

以上是关于575. 分糖果的主要内容,如果未能解决你的问题,请参考以下文章

575. 分糖果

leetcode打卡——去重之575. 分糖果

LeetCode 575 分糖果[set] HERODING的LeetCode之路

575. 分糖果思维

LeetCode 575. 分糖果

LeetCode 575. 分糖果 / 237. 删除链表中的节点 / 407. 接雨水 II