分糖果

题目:

有N个小朋友站在一排,每个小朋友都有一个评分
你现在要按以下的规则给孩子们分糖果:
  • 每个小朋友至少要分得一颗糖果
  • 分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
你最少要分发多少颗糖果?

示例:

输入:[1, 2, 2]    输出:4

代码:

 1 import java.util.*;
 2 public class Solution {
 3     /**
 4      * 
 5      * @param ratings int整型一维数组 
 6      * @return int整型
 7      */
 8     public int candy (int[] ratings) {
 9         // write code here
10         int count = 0;
11         int[] suger = new int[ratings.length];
12         Arrays.fill(suger,1);
13         //从左至右依次比较,保证比前一个分数低的糖果多
14         for( int i = 1; i < ratings.length; i ++ ) {
15             if( ratings[i] > ratings[i - 1] )
16                 suger[i] += suger[i - 1];
17         }
18         //从右至左依次比较,保证分数大的,糖果多
19         for( int i = ratings.length - 1; i > 0; i -- ) {
20             count += suger[i];
21             if( ratings[i] < ratings[i - 1] && suger[i - 1] <= suger[i] )
22                 suger[i - 1] = suger[i] + 1;
23         }
24         count += suger[0];
25         return count;
26     }
27 }

笔记:

  进行两次相反方向的比较。

posted @ 2020-09-19 16:10  John_yan15  阅读(240)  评论(0编辑  收藏  举报