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. 分糖果的主要内容,如果未能解决你的问题,请参考以下文章