贪心算法解决分发糖果问题

代码随想录链接: 代码随想录

思路:

由于每个孩子都要得到一块糖果,因此初始化一个全为1的数组,该数组的长度等于孩子的个数

从前往后遍历,如果位置i处的孩子对应的分数大于位置i-1处的孩子的分数,令该孩子 获得的糖果数量为位置i-1 处孩子获得的糖果数量+1

从后往前遍历数组中的每个元素,如果位置i处的孩子 对应的分数大于 位置i+1处的孩子 的分数,令该孩子 获得的糖果数量为位置i+1处孩子糖果数量+1原先该孩子获得的糖果数量最大值

两次遍历结束后,统计数组中的每个元素之和,即表示获得的最终结果

代码:

java 复制代码
class Solution {
    /**
         分两个阶段
         1、起点下标1 从左往右,只要 右边 比 左边 大,右边的糖果=左边 + 1
         2、起点下标 ratings.length - 2 从右往左, 只要左边 比 右边 大,此时 左边的糖果应该 取本身的糖果数(符合比它左边大) 和 右边糖果数 + 1 二者的最大值,这样才符合 它比它左边的大,也比它右边大
    */
    public int candy(int[] ratings) {
        int len = ratings.length;
        int[] candyVec = new int[len];
        candyVec[0] = 1;
        for (int i = 1; i < len; i++) {
            candyVec[i] = (ratings[i] > ratings[i - 1]) ? candyVec[i - 1] + 1 : 1;
        }

        for (int i = len - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1]) {
                candyVec[i] = Math.max(candyVec[i], candyVec[i + 1] + 1);
            }
        }

        int ans = 0;
        for (int num : candyVec) {
            ans += num;
        }
        return ans;
    }
}
相关推荐
无限码力8 分钟前
阿里算法岗 0530笔试真题 - 寻找满足条件的最优子序列
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试真题·阿里算法题
@小阿宝14 分钟前
机器人正向逆向运动学
算法·机器人
小雨下雨的雨16 分钟前
数独算法与求解器鸿蒙PC Electron框架完成深度解析
javascript·人工智能·算法·游戏·华为·electron·鸿蒙系统
HZ·湘怡19 分钟前
数据结构之排序算法 (1)--插入排序
c语言·数据结构·算法·排序算法
ouliten19 分钟前
[Triton笔记7]融合注意力 (Fused Attention)
人工智能·笔记·算法
开源Z20 分钟前
LeetCode 238 · 除自身以外数组的乘积:左右两遍扫描,不用除法
算法·leetcode
BAGAE31 分钟前
FEC-RS前向纠错编码理论及工程实施研究
c语言·c++·qt·算法·决策树·链表
兰令水35 分钟前
leecodecode【状态机DP】【2026.6.9打卡-java版本】
java·开发语言·算法
8Qi842 分钟前
LeetCode 5:最长回文子串(Longest Palindromic Substring)—— 题解
算法·leetcode·职场和发展·动态规划
j7~1 小时前
【算法】专题一:双指针之移动零,复写零,快乐数
数据结构·c++·算法·双指针·快乐数·移动零·复写零