leetcode(135)分发糖果

分发糖果

解题思路:贪心算法、两次遍历

class Solution {
    public int candy(int[] ratings) {
        int len = ratings.length;
        if(len==0){
            return 0;
        }
        int[] cands = new int[len];
        for(int i=0;i<len;i++){
            cands[i] = 1;
        }
        for(int i=0;i<len-1;i++){
            if(ratings[i+1]>ratings[i]&&cands[i+1]<=cands[i]){
               cands[i+1]=cands[i]+1;
            }
        }
        for(int i=len-1;i>0;i--){
            if(ratings[i-1]>ratings[i]&&cands[i-1]<=cands[i]){
               cands[i-1]=cands[i]+1;
            }
        }
        int sum = 0;
        for(int i=0;i<len;i++){
            sum += cands[i];
        }
        return sum;
    }
}

原文地址:https://www.cnblogs.com/erdanyang/p/11128372.html

时间: 2024-10-12 05:22:12

leetcode(135)分发糖果的相关文章

【LeetCode】分发糖果系列问题(I、II、III)

(一)分糖果 题目(Easy): 575. 分糖果 题目描述: 给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果.你需要把这些糖果平均分给一个弟弟和一个妹妹.返回妹妹可以获得的最大糖果的种类数. 示例 : 输入: candies = [1,1,2,2,3,3] 输出: 3 解析: 一共有三种种类的糖果,每一种都有两个. 最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3].这样使妹妹获得糖果的种类数最多. 解题思路: ??本题比较简单,实际上就是将n个

[LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现

[LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现 原题: There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least

LeetCode:分发饼干【455】

LeetCode:分发饼干[455] 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 j ,都有一个尺寸 sj .如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足.你的目标是尽可能满足越多数量的孩子,并输出这个最大数值. 注意: 你可以假设胃口值为正.一个小朋友最多只能拥有一块饼干. 示例 1: 输入: [1,2,3

LeetCode.1103-向人们分发糖果(Distribute Candies to People)

这是小川的第393次更新,第425篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第256题(顺位题号是1103).我们通过以下方式向一排n = num_people个人分发一些糖果: 给第一个人送1个糖果,给第二个人送2个糖果,依此类推,直到我们给最后一个人送糖果.然后,我们回到行的开头,向第一个人提供n + 1个糖果,向第二个人提供n + 2个糖果,依此类推,直到我们向最后一个人提供2 * n个糖果. 这个过程重复进行,直到我们用完糖果.最后一个人将得到所有剩余的

LeetCode 135 Candy(贪心算法)

135. Candy There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy. Children with a higher rating get mo

LeetCode——1103. 分糖果 II

排排坐,分糖果. 我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友. 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果. 然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果. 重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果.注意,就算我们手中的剩下糖果数不

LeetCode 135. Candy (O(n)时间 O(n)和O(1)空间的两种实现)

贪心算法,从局部最优推广成全局最优. 这里介绍O(n)时间 O(n)和O(1)空间的两种实现方法. O(n)时间 O(n)空间实现,参考了cnblog, 1957的解法 创建candy数组,初始化为1. 用pre_child_candy记录前一个孩子拿到的糖果数 1. 从左往右遍历 1) 如果ratings[i] > ratings[i-1], 那么candy[i] = ++ pre_child_candy, 亦即这个孩子比前一个孩子多拿一个糖果 2) 反之,candy[i] = pre_chi

leetcode[135] Candy

最少糖果问题.一排小孩,每个孩子有一个优先级,每个孩子至少要发给一个糖果,优先级高的比周围的孩子的糖果要多. 需要注意的是,优先级一样的没有要求说一样多糖果! 先初始化,每人一糖. 为了保证优先级大的比相邻的且优先级小的要糖果多.所以我们分两次处理,一次处理比左边的多,一次处理兼顾左边的多的情况下比右边的多.(如果优先级满足多的前提) 那么第一次从左到右,if (ratings[i] > ratings[i-1]) 那么cd[i] = cd[i-1]+1;    cd指糖果数组 从右边到左边需要

leetcode 135. Candy ----- java

There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy. Children with a higher rating get more candies