拥有最多糖果的孩子
1.题目链接:
1431. 拥有最多糖果的孩子
2.原题描述:
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
3.相关算法
本题主要是使用遍历的方式解题
4.本题主要思路
本题使用两个for循环【时间复杂度O(2n),空间复杂度O(n)】,先将糖果最多的找出作为目标进行比较,第二个for循环进行比较,若加上额外的糖果大于等于最多的糖果数的时候,将在list集合中添加一个true,否则添加false,最后将list的结果返回。
5.源码分析
class Solution {
public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
int max = 0; // 1
List<Boolean> list = new ArrayList<>(); // 2
for(int i = 0; i<candies.length;++i){ // 3
if(candies[i]>max){
max = candies[i];
}
}
for(int i= 0; i<candies.length; ++i){
if(candies[i]+extraCandies>=max){ // 4
list.add(true);
}else{ // 5
list.add(false);
}
}
return list; // 6
}
}
- 创建一个最大糖果数的保存整数
- 创建一个布尔类型的list集合,存放结果
- 第一个for循环遍历得到max的值
- 第二个for循环用于比较max,当加上额外的糖果后大于等于max则往list集合中添加true
- 加上额外的糖果与max比较,比其要小,往list集合中添加false;
- 返回最后的list集合