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

152 阅读1分钟

拥有最多糖果的孩子

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
    }
}
  1. 创建一个最大糖果数的保存整数
  2. 创建一个布尔类型的list集合,存放结果
  3. 第一个for循环遍历得到max的值
  4. 第二个for循环用于比较max,当加上额外的糖果后大于等于max则往list集合中添加true
  5. 加上额外的糖果与max比较,比其要小,往list集合中添加false;
  6. 返回最后的list集合