【数组】分糖果问题

求解代码

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;
    }
相关推荐
深邃-几秒前
【数据结构与算法】-二叉树(2):实现顺序结构二叉树(堆的实现),向上调整算法,向下调整算法,堆排序,TOP-K问题
数据结构·算法·二叉树·排序算法·堆排序··top-k
咸鱼2.02 分钟前
【java入门到放弃】Dubbo
java·开发语言·dubbo
We་ct3 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
JAVA面经实录9176 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
周杰伦fans7 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
叼烟扛炮8 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说8 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
许彰午8 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
wuweijianlove8 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法