1. 程式人生 > 實用技巧 >分糖果

分糖果

題目:

有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 }

筆記:

  進行兩次相反方向的比較。