Leetcode面试经典150题-135.分发糖果

解法都在代码里,不懂就留言或者私信

阿里字节都考过

java 复制代码
class Solution {
    /**对于每个孩子来说,我们试一下从左边开始它应该分几个糖果,然后看一下从右边开始它应该分几个糖果
    然后左右取最大值,每个位置求和就是我们要的答案 */
    public int candy(int[] ratings) {
        /***如果就一个孩子,没人跟他比,给最少的即可 */
        if(ratings.length == 1) {
            return 1;
        }
        /**candiesFromLeft表示从左边开始遍历,按照题目的要求每个孩子最少分几个糖
        candiesFromRight表示从右边开始遍历,按照题目的要求每个孩子最少分几个糖,我们虽然是能少给就少给
        但是我们一定要取两个里最大的,因为这两个数组都是从某一侧开始算的最少糖果,所以不能比这个数更少了*/
        int[] candiesFromLeft = new int[ratings.length];
        int[] candiesFromRight = new int[ratings.length];
        candiesFromLeft[0] = 1;
        candiesFromRight[ratings.length - 1] = 1;
        for(int i = 1; i < candiesFromLeft.length; i++) {
            /**比前面的得分高就用前面的+1,否则1 */
            candiesFromLeft[i] = ratings[i]>ratings[i-1]? candiesFromLeft[i-1] + 1 : 1;
        }
        for(int i = ratings.length - 2; i >= 0; i--) {
            /**比后面的得分高就用后面的+1,否则1 */
            candiesFromRight[i] = ratings[i] > ratings[i+1]? candiesFromRight[i+1] + 1 : 1;
        }
        /**开始统计每个位置的最少糖数并相加*/
        int total = 0;
        for(int i = 0; i < ratings.length; i++) {
            /**每个位置取两个数组中这个位置的最大值 */
            total += Math.max(candiesFromLeft[i], candiesFromRight[i]);
        }
        return total;
    }
}
相关推荐
leo__5205 分钟前
MATLAB实现牧羊人算法
开发语言·算法·matlab
烬羽6 分钟前
JS 单线程为什么不卡?一文吃透同步异步、Event Loop 和 Promise
javascript·面试
Gauss松鼠会11 分钟前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
Tisfy16 分钟前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
葬送的代码人生16 分钟前
JavaScript 数组完全指南:从入门到实战
前端·javascript·算法
哈撒Ki22 分钟前
快速入门vue3与常见面试题
前端·vue.js·面试
春日见32 分钟前
决策规划控制面经汇总
人工智能·深度学习·算法·机器学习·自动驾驶
Full Stack Developme32 分钟前
Java DFA算法
java·python·算法
fie888942 分钟前
LBP + HOG 特征检测与识别 MATLAB 实现
数据结构·算法·matlab
海天鹰44 分钟前
图片去黑边算法
qt·算法