Bootstrap

leetcode 力扣每日一题系列详解——分糖果 2021.11.1

这是总目录leetcode 力扣每日一题系列详解——总目录


💡题目要求

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

示例 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
————————————————————————————————

💢💢版权声明

版权声明:本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系
对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明

;