Candy

来源:互联网 发布:淘宝什么返利网最好 编辑:程序博客网 时间:2024/06/09 18:35

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 than their neighbors.

What is the minimum candies you must give?

思路: 先从前往后, 如果rating比前面的那个大, 就在前面那个基础上加1, 否则为1.

再从后往前,如果rating 比后面那个大, 但是candy 没有比后面那个大, 就要在后面那个基础上加1.

易错点:  记住后面往前时候, if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1])才能              candys[i] = candys[i + 1] + 1;

public class Solution {    public int candy(int[] ratings) {        int n = ratings.length;        int[] candys = new int[n];        int ret = 0;        candys[0] = 1;        for(int i = 1; i < n; i++){            if(ratings[i] > ratings[i - 1]){                candys[i] = candys[i - 1] + 1;            }else{                candys[i] = 1;            }        }                ret = candys[n - 1];        for(int i = n - 2; i >= 0; i--){            if(ratings[i] > ratings[i + 1] && candys[i] <= candys[i + 1]){                candys[i] = candys[i + 1] + 1;            }            ret += candys[i];        }        return ret;    }}




0 0