码迷,mamicode.com
首页 > 其他好文 > 详细

575. 分糖果

时间:2020-05-10 14:44:24      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:糖果   pre   add   turn   i++   哈希   长度   种类   length   

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

示例 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. 分糖果

标签:糖果   pre   add   turn   i++   哈希   长度   种类   length   

原文地址:https://www.cnblogs.com/cocobear9/p/12863090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!