1. 程式人生 > >LeetCode 解題報告 Candy

LeetCode 解題報告 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 more candies than their neighbors.

What is the minimum candies you must give?

分析:

今年在做4399的筆試題的時候,遇到了這個題,當時沒有一點思路。

這次再拿到這個題的時候還是沒有什麼思路,但感覺應該是動態規劃的題,後來在網上看了解題報告之後,證實了我的猜想,雖然對動態規劃有所瞭解 ,但如果真的讓自己從頭到尾的把題想出來,做出來,真的是有難度

下面就說說這個題的思路吧

要求每人至少一個,但臨近的人並且比別人高,所拿到的糖就要多

首先用一個數組來儲存每一個位置的大小,從左右兩邊遍歷,如果後一個比前一個大,num[i] = max(inc++,num[i]);

public class Candy {
	public int candy(int[] ratings) {
		int [] num = new int[ratings.length];
		int result =ratings.length;
		for(int i=1,inc = 1;i<ratings.length;i++){
			if(ratings[i] > ratings[i-1]){
				num[i] = Math.max(num[i],inc++);
			}
			else
				inc = 1;
		}
		for(int i = ratings.length-2,inc = 1;i>=0;i--){
			if(ratings[i] > ratings[i+1])
				num[i] = Math.max(inc++, num[i]);
			else
				inc = 1;
		}
		for(int i=0;i<ratings.length;i++){
			result += num[i];
		}
		return result;
    }
}