【数组】分糖果问题

求解代码

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;
    }
相关推荐
2501_924952691 分钟前
C++模块化编程指南
开发语言·c++·算法
qzhqbb2 分钟前
差分隐私与大模型+差分隐私在相关领域应用的论文总结
人工智能·算法
2401_831920745 分钟前
基于C++的爬虫框架
开发语言·c++·算法
我是咸鱼不闲呀5 分钟前
力扣Hot100系列22(Java)——[图论]总结(岛屿数量,腐烂的橘子,课程表,实现Trie(前缀树))
java·leetcode·图论
1104.北光c°6 分钟前
深入浅出 Elasticsearch:从搜索框到精准排序的架构实战
java·开发语言·elasticsearch·缓存·架构·全文检索·es
MSTcheng.12 分钟前
【优选算法必修篇——位运算】『面试题 01.01. 判定字符是否唯一&面试题 17.19. 消失的两个数字』
java·算法·面试
weixin_4219226912 分钟前
模板元编程性能分析
开发语言·c++·算法
蹦哒14 分钟前
Kotlin 与 Java 语法差异
java·python·kotlin
2401_8512729914 分钟前
C++中的类型擦除技术
开发语言·c++·算法
左左右右左右摇晃14 分钟前
Java并发——并发编程底层原理
java·开发语言