LeetCode - 575. Distribute Candies

链接

575. Distribute Candies

题意

给兄妹分糖果,糖果数量表示为偶数长度的数组,不同的数字代表不同的糖果,每个数字代表一颗糖果。现要求兄妹分得的糖果数量一样多,但是妹妹的种类必须尽量多。返回妹妹获得的糖果种类数。

思路

第一种:先对数组排序,那么同种糖果归类到了一起。只需遍历数组,每种糖果取一种,直到数量达到一半。
第二种:直接将每种糖果存入set,则可获得所有糖果的种类,若种类大于一半,则返回数组长度的一半(因为妹妹最多获得一半数量糖果),若小鱼

代码

Java:

// 思路1
public class Solution {
    public int distributeCandies(int[] candies) {
        int res = 0;
        Arrays.sort(candies);
        for (int i = candies.length - 2; i >= 0; i--) {
            // 如果糖果相同,那么先跳过所有相同的,最后再取一个
            // 但如果i为0,已经没有糖果了,因此这个也要取
            if (candies[i] == candies[i+1]) {
                if (i == 0) res++;
                continue;
            }
            res++;
            if (res == candies.length / 2) return res;
        }
        if (candies[0] != candies[1]) res++;
        return res;
    }
}

// 思路2
public class Solution {
    public int distributeCandies(int[] candies) {
        Set<Integer> kinds = new HashSet<>();
        for (int candy : candies) kinds.add(candy);
        return kinds.size() >= candies.length / 2 ? candies.length / 2 : kinds.size();
    }
}

转载于:https://www.cnblogs.com/zyoung/p/6861312.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值