Leetcode——1431.拥有最多糖果的孩子

拥有最多糖果的孩子

题目

给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。

思路

先找出最大糖果数的那个孩子,只要每个孩子的糖果数加上额外的小于最大的,就判断为false,否则为true.【超级简单题】

代码

import java.util.ArrayList;
import java.util.List;
class Solution {
    public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
        List<Boolean>list=new <Boolean>ArrayList();
        int max=Integer.MIN_VALUE;
        for(int i=0;i<candies.length;++i)//取出最大糖果数
        {
            max=max>candies[i]?max:candies[i];
        }
        for (int i=0;i<candies.length;++i)
        {
            if (candies[i]+extraCandies<max)
                list.add(false);
            else
                list.add(true);
        }
        return  list;
    }
}

你可能会说?这么简答还写什么题解,额,习惯。。。
我在这个过程中,突然有个想法,就是这段代码,这么简单的情况下,有没有可能更快?
然后,我就改了这段代码:

//原来代码
            if (candies[i]+extraCandies>=max)
                list.add(true);
            else
                list.add(false);
//现在代码
            if (candies[i]+extraCandies<max)
                list.add(false);
            else
                list.add(true);

可能看起来结果不是相差很大,但是我一想,如果是大于等于max,这岂不是要判断两种情况,大于或者等于,而小于,直接判断一种,可能会比较快,所以,我跑去测试了一下;

/*改进前
* 152700ns
* 106500ns
* 144900ns
* 121000ns
* 178600ns
* 224600ns
* */

/*改进后
* 117700ns
* 94100ns
* 120400ns
* 84600ns
* 401000ns
* 112200ns
* */

平均一看,还是有点差距的。不过这个也不排除是机器的缘故。各位大佬,就当做看着乐呵。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值