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
* */

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

Leetcode——1431.拥有最多糖果的孩子_第1张图片

你可能感兴趣的:(LeetCode)