zoukankan      html  css  js  c++  java
  • 【LeetCode】135.分发糖果

    题目链接

    135. 分发糖果

    题目描述

    解题思路

    贪心法

    两次贪心:从左到右进行贪心选择,从右到左进行贪心选择

    题目中说到:相邻的孩子中,评分高的孩子必须获得更多的糖果。这里的相邻包含两种情况:左相邻和右相邻,我们不能一次性把左相邻和右相邻通通考虑,这样只会得不偿失,我们采取的策略是分两次考虑,所以可以把总的规则分为左相邻规则右相邻规则,只要同时满足左相邻规则右相邻规则,那就满足了题目要求。

    初始所有孩子的糖果数都为1.
    左相邻规则:从左到右遍历,if(rate[i] > rate[i-1]),索引为i的孩子的糖果数目比索引为i-1的孩子的糖果数+1,并用left数组记录
    右相邻规则:从右到左遍历,if(rate[i] > rate[i+1]),索引为i的孩子的糖果数目比索引为i+1的孩子的糖果数+1,并用right数组记录
    如何既满足左相邻又满足右相邻规则呢?
    最终索引为i的孩子拥有的糖果数目=Math.max(left[i],righy[i])
    

    AC代码

    class Solution {
        public int candy(int[] ratings) {
            int left[] = new int[ratings.length];
            int right[] = new int[ratings.length];
            Arrays.fill(left,1);
            Arrays.fill(right,1);
            int ans = 0;
            for(int i = 1; i < ratings.length; i++){
                if(ratings[i] > ratings[i-1]) left[i] = left[i-1] + 1;
            }
            for(int i = ratings.length-2; i >= 0; i--){
                if(ratings[i] > ratings[i+1]) right[i] = right[i+1] + 1;
            }
            for(int i = 0; i < ratings.length; i++){
                ans += Math.max(left[i],right[i]);
            }
            return ans;
        }
    }
    
  • 相关阅读:
    jquery operate
    ujs
    图标站
    rails foreign key
    feedback product from uservoice
    秒杀网
    short url
    rails nil blank
    paperclip imagemagic api &paperclip relevent
    类似优米网
  • 原文地址:https://www.cnblogs.com/XDU-Lakers/p/14183772.html
Copyright © 2011-2022 走看看