575. 分糖果

导读:本篇文章讲解 575. 分糖果,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

分糖果(LeetCode)

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 种糖。

代码:

public class Solution {
    public int distributeCandies(int[] candies) {
        int count = 0;
        for (int i = 0; i < candies.length && count < candies.length / 2; i++) {
            if (candies[i] != Integer.MIN_VALUE) {
                count++;
                for (int j = i + 1; j < candies.length; j++) {
                    if (candies[j] == candies[i])//后一个等于前一个
                        candies[j] = Integer.MIN_VALUE;//无效
                }
            }
        }
        return count;
    }
}

题解

首先我们需要观察一点。女孩能得到的唯一糖果的最大数量可以是 n/2,其中 n 是指糖果的数量。此外,如果独特的糖果数量低于 n/2 的话,为了使女孩能得到的独特的糖果数量最大化,我们会将所有独特的糖果分配给女孩。因此,在这种情况下,女孩得到的独特糖果数量等于给定 candies 数组中的独特糖果总数。
现在,我们需要在给定的 candies 数组中找到唯一糖果的总数。找到唯一糖果数量的一种方法是遍历给定的 candies数组。每当我们遇到一个元素,比如 candies[j]时,我们可以将所有与 candies[j]相同的元素标记为无效,并将唯一元素的计数增加 1。
最后,count会提供给女孩所需数量的独特糖果。此外,要返回的值由:min(n/2​,count) 给出。当 count 超过 n/2 时,我们可以停止对给定 candies 数组的遍历。

在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE -2147483648。在代码中代表无效

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115423.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!