LeetCode 解題報告 Candy
阿新 • • 發佈:2019-02-20
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; } }