题目
给你一个数组 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
* */
平均一看,还是有点差距的。不过这个也不排除是机器的缘故。各位大佬,就当做看着乐呵。