分糖果 | LeetCode刷题笔记

2,487 阅读2分钟

这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战


相关文章

LeetCode刷题汇总: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],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
    
  • 首先确定这个题目的意思。

  • 糖果的数量肯定是偶数。

  • 但是糖果的种类可不一定,也许有两个1糖果,一个2,一个3糖果。

  • 这种情况下肯定需要给妹妹两种,因为妹妹需要最大种类的糖果。

  • 坑踩完之后就可以想方法来写了。

  • 如何找到唯一元素?

  • set!!!我们可以利用set来确定所有唯一元素。

  • 最后计算set的大小即是糖果种类的数量。

  • 要返回的值将再次由min(count,n/2) 给出。

  • min(count,n/2) 给定数值中最小的数。如果任一参数不能转换为数值,则返回NaN

三、AC 代码


  • set破解法:

    class Solution {
        public int distributeCandies(int[] candyType) {
            HashSet < Integer > set = new HashSet < > ();
            for (int candy: candyType) {
                set.add(candy);
            }
            return Math.min(set.size(), candyType.length / 2);
        }
    }
    
    • image-20210830084802277.png
    • 效率还是很高的呀

四、总结

  • 解题思路千千万,不管是本办法还好,还是奇思妙想的解法,能解决就是好办法!白猫黑猫能抓老鼠的猫就是好猫!
  • 这里列几个LeetCode的其他大神的解法作为参考!
  • 点击跳转:官方解法
  • 点击跳转:解法2

路漫漫其修远兮,吾必将上下求索~

如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah