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;
    }
}
相关推荐
吃好睡好便好2 小时前
提取矩阵某一行或某一列元素
开发语言·人工智能·线性代数·算法·matlab·矩阵
better_liang4 小时前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq
小江的记录本4 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
圣保罗的大教堂5 小时前
leetcode 2540. 最小公共值 简单
leetcode
better_liang5 小时前
每日Java面试场景题知识点之-SpringBoot启动流程
java·面试·springboot·源码解析·启动流程
Raink老师5 小时前
【AI面试临阵磨枪-69】如何设计一个支持百万级工具的 Agent 系统?如何快速路由与选择工具?
人工智能·面试·职场和发展
云泽8086 小时前
笔试算法 -位运算篇(二):从唯一字符到消失数字
c++·算法·位运算
ʚ希希ɞ ྀ6 小时前
不同路径|| -- dp
算法
Raink老师6 小时前
【AI面试临阵磨枪-77】音视频 + AI:实时字幕、翻译、降噪、虚拟人、多模态对话
人工智能·面试·音视频
IT 行者7 小时前
SimHash 与 MinHash:相似性计算的双子星算法
算法·hash·比对