leetcode 力扣每日一题系列详解——分糖果 2021.11.1
💡题目要求
分糖果
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
示例 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]内。
💡答案和解题思路
我自己感觉力扣的代码编辑器真是太难用了,我就自己写好,在unity里面做测试,没问题再复制到力扣里面,然后运行测试
🌲1.下面是我自己写的答案,感觉非常臃肿,还好最终通过了
public int DistributeCandies(int[] candyType)
{
//是否相同
bool ifSame = false;
//最大种类
int maxNum = 0;
List<int> noRepeat = new List<int>();
for (int i = 0; i < candyType.Length; i++)
{
ifSame = false;
for (int j = i + 1; j < candyType.Length; j++)
{
if (candyType[i] == candyType[j])
{
ifSame = true;
break;
}
}
if (!ifSame)
{
noRepeat.Add(candyType[i]);
}
}
ifSame = false;
foreach (var t in noRepeat)
{
if (candyType.Last() == t)
{
ifSame = true;
break;
}
}
if (!ifSame)
{
noRepeat.Add(candyType[candyType.Length - 1]);
}
if (noRepeat.Count >= candyType.Length * 0.5)
{
maxNum = Convert.ToInt32(candyType.Length * 0.5);
}
else if (noRepeat.Count == 0)
{
maxNum = 1;
}
else
{
maxNum = noRepeat.Count;
}
return maxNum;
}
🌲2.接下来是看完官方的答案解析之后,重新写的
public int DistributeCandies1(int[] candyType)
{
HashSet<int> hashSet = new HashSet<int>(candyType);
return hashSet.Count >= candyType.Length * 0.5 ? Convert.ToInt32(candyType.Length * 0.5) : hashSet.Count;
}
💡二、知识点学习
一开始我的想法是这样的:重新开个list,把不重复的糖果种类全部放到里面,如果比原来糖果数量1/2大,那数量就是原来糖果数量的1/2,如果比原来的糖果数量1/2小,就是这个list的数量。大量的代码用来做list的筛选了,期间还出了几次错,然后看完题解之后恍然大悟,原来C#还有HashSet这种数据结构,真的太好用了。
今天的知识点就是:C#中HashSet的不重复性
总结
欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。
如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~
声明:本博文章若非特殊注明皆为原创原文链接
https://blog.csdn.net/Wrinkle2017/article/details/121098934
————————————————————————————————
💢💢版权声明
版权声明:本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系
对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明