【数组】分糖果问题

求解代码

java 复制代码
public int candy(int[] arr) {
        if (arr == null || arr.length == 0) {
            return 0;
        }

        int n = arr.length;
        int[] candyCount = new int[n]; // 定义数组记录每个孩子最终应分得的糖果数
        int ans = 0; // 统计分发糖果的总数量

        // 每个孩子至少分得1颗糖果
        for(int i=0;i<arr.length;i++){
            candyCount[i]=1;
        }

        // 从左到右遍历数组,保证相邻孩子中,右侧评分更高的孩子糖果数多于左侧
        for(int i=1;i<n;i++){
            if(arr[i] > arr[i-1]){
                candyCount[i] = candyCount[i-1] + 1;
            }
        }

        // 从右到左遍历数组,保证相邻孩子中,左侧评分更高的孩子糖果数多于右侧
        for(int i=n-2;i>=0;i--){
            if(arr[i] > arr[i+1] && candyCount[i] <= candyCount[i+1]){
                candyCount[i] = candyCount[i+1] + 1;
            }
        }

        // 累加所有孩子的糖果数,得到分发的总数量
        for (int i = 0; i < n; i++) {
            ans += candyCount[i];
        }
        // 返回总糖果数
        return ans;
    }
相关推荐
迷渡3 分钟前
用 Rust 重写的 Bun 有 13365 个 unsafe!
开发语言·后端·rust
九皇叔叔6 分钟前
高斯性能分析【第一天】单表执行计划分析
java·数据库·性能分析·执行计划·gauss
一只叁木Meow7 分钟前
电商 SKU 选择器:用算法实现优雅的用户交互
前端·javascript·算法
苦逼的猿宝8 分钟前
基于springboot的社区团购系统设计(源码+论文)
java·毕业设计·springboot·计算机毕业设计
电魂泡哥9 分钟前
RocketMQ Dledger 集群与 Raft 协议
java·rocketmq·java-rocketmq
代码中介商12 分钟前
红黑树完全指南:从五条性质到完整插入删除实现
数据结构·算法
JieE21214 分钟前
反转链表:从双指针到递归,吃透链表反转的核心逻辑
javascript·算法
吃好睡好便好17 分钟前
在Matlab中绘制质点三维运动轨迹图
开发语言·学习·matlab·信息可视化
代码村新手17 分钟前
C++-多态
开发语言·c++
行走的蜗牛18 分钟前
【springai】 Model层设计与实现
java·ai编程