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;
    }
}
相关推荐
前端Hardy17 分钟前
面试官:JS数组的常用方法有哪些?这篇总结让你面试稳了!
javascript·面试
牛奶1 小时前
React 底层原理 & 新特性
前端·react.js·面试
牛奶1 小时前
ts随笔:面向对象与高级类型
前端·面试·typescript
牛奶1 小时前
React 基础理论 & API 使用
前端·react.js·面试
爱理财的程序媛2 小时前
openclaw 盯盘实践
算法
SuperEugene2 小时前
从 Vue2 到 Vue3:语法差异与迁移时最容易懵的点
前端·vue.js·面试
SuperEugene3 小时前
接口类型管理:从 any 到有组织的 api.d.ts
前端·面试·typescript
牛奶3 小时前
ts随笔:基础与类型系统
前端·面试·typescript
用户73992986959723 小时前
DeepSeek/GPT-4 落地实战:我如何用 Node.js + AI 手搓一个“面试神器”
面试
牛奶3 小时前
JS随笔:浏览器 API(DOM 与 BOM)
前端·javascript·面试