本文主要是介绍LeetCode575. 分糖果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。
医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。
给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的最多种类数。
示例 1:
输入:candyType = [1,1,2,2,3,3]
输出:3
解释:Alice 只能吃 6 / 2 = 3 枚糖,由于只有 3 种糖,她可以每种吃一枚。
示例 2:输入:candyType = [1,1,2,3]
输出:2
解释:Alice 只能吃 4 / 2 = 2 枚糖,不管她选择吃的种类是 [1,2]、[1,3] 还是 [2,3],她只能吃到两种不同类的糖。
示例 3:输入:candyType = [6,6,6,6]
输出:1
解释:Alice 只能吃 4 / 2 = 2 枚糖,尽管她能吃 2 枚,但只能吃到 1 种糖。
提示:
n == candyType.length
2 <= n <= 104
n 是一个偶数
-105 <= candyType[i] <= 105来源:力扣(LeetCode)
链接:力扣
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:暴力法(一分钟不假思索版)
特点:代码简单,可读性尚可,但性能感人T.T
思路:
- Alice最多可分到总数的一半,多一个的糖果种类;
- Alice最多可分到所有的糖果的种类;
- 两者取其小
相关代码片段:C#字符串去除串内重复字符
public class Solution
{public int DistributeCandies(int[] candyType) {return HleetCode.N575DistributeCandies.Commit(candyType);}public static partial class HleetCode{public static class N575DistributeCandies{public static int Commit(int[] candyType){//计算可能的结果int possibleCount=candyType.Length/2;//数组去重var array=candyType.Distinct().ToArray();//上面两个取最小值return array.Length<possibleCount?array.Length:possibleCount;}}}
}
官方题解:
特点:用到了HashSet<int>()去重,但效率好像也就那样
(这就是所谓的贪心算法吗?和我本质也的没啥区别,还是多刷点贪心算法的题吧!)
public class Solution {public int DistributeCandies(int[] candyType) {ISet<int> set = new HashSet<int>();foreach (int candy in candyType) {set.Add(candy);}return Math.Min(set.Count, candyType.Length / 2);}
}
这篇关于LeetCode575. 分糖果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!