LeetCode简单题分享(15)

拥有最多糖果的孩子

题目:

        LeetCode简单题分享(15)_第1张图片

这道题的大概思路其实很简单,要判断是否能称为糖果最多的孩子,那么就要分两步进行:

1.遍历数组找到拥有糖果最多的孩子

2.循环遍历判断加上多余的糖果能否成为最多的孩子

也就是说现在的糖果+多余的糖果>=糖果最多的孩子,就可以了。

代码如下:

import java.util.ArrayList;
import java.util.List;

class Solution {
    public static void main(String[] args) {
        int[] candies = {2,3,5,1,3};
        int extraCandies =3;
        List booleans = kidsWithCandies(candies, extraCandies);
        System.out.println(booleans);
    }
    public static List kidsWithCandies(int[] candies, int extraCandies) {
        
        List booleans = new ArrayList(candies.length);
        int theMost = candies[0];
        for (int i = 0; i < candies.length; i++) {
            if (candies[i]>=theMost){
                theMost=candies[i];
            }
        }
        for (int j = 0; j < candies.length; j++) {
            if (candies[j]+extraCandies >= theMost){
                booleans.add(j,true);
            }else {
                booleans.add(j,false);
            }
        }
        return booleans;
    }
}

看起来有点复杂,boolean数组里面的值其实是可以直接判断的。

优化后的代码:

    public static List kidsWithCandies(int[] candies, int extraCandies) {
        //初始化一个boolean数组
        List booleans = new ArrayList(candies.length);
        //最大值
        int theMost = 0;
        //循环遍历求最大值
        for (int i = 0; i < candies.length; i++) {
            if (candies[i]>=theMost){
                theMost=Math.max(candies[i],theMost);
            }
        }
        //添加T/F,只需要现在的值+多余糖果>=最大值就好了
        for (int j = 0; j < candies.length; j++) {
                booleans.add(j,candies[j]+extraCandies >= theMost);
        }
        return booleans;
    }

leetcode运行结果:

LeetCode简单题分享(15)_第2张图片

你可能感兴趣的:(leetcode,图论,算法,java)