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;
    }
}
相关推荐
楽码11 分钟前
在RestFul接口应用Hmac算法
后端·算法·restful
BUG收容所所长24 分钟前
响应式布局核心:掌握CSS长度单位与媒体查询
前端·css·面试
BUG收容所所长24 分钟前
元素隐藏的九种方式:从display到clip-path的终极指南
前端·css·面试
小高00724 分钟前
⚡90%前端没摸过的 10 个 JS 神 API?复制即用,今晚早下班
前端·javascript·面试
用户71431098388527 分钟前
Claude Code VSCode集成开发指南:AI编程助手完整配置
算法
言兴29 分钟前
现代前端框架的响应式底层原理 —— 面试题从 Object.defineProperty 到 Proxy
前端·javascript·面试
PineappleCoder34 分钟前
红绿灯无限循环的 3 种实现,哪种更受面试官青睐?
前端·javascript·面试
用户71431098388535 分钟前
Claude Code团队协作实战指南:构建高效AI驱动开发团队
面试
CoovallyAIHub1 小时前
SOD-YOLO:基于YOLO的无人机图像小目标检测增强方法
深度学习·算法·计算机视觉
石小石Orz1 小时前
深入理解 Vue 的 MVVM 架构与响应式原理
前端·面试