分发糖果(困难)
思路:
最开始的时候给每个孩子发一块糖。然后从左往右遍历,如果右边的孩子比左边的孩子评分高并且右边的孩子手里有的糖果数量不比左边的孩子大,就给右边的孩子发糖果,让右边的孩子的糖果数量比左边孩子糖果数量多一个。
这个时候满足右边分高的孩子的糖果数量都比左边分低孩子的糖果数量多。
接下来在从右往左遍历,同理,如果左边的孩子比右边的孩子评分高且左边的孩子手里面的糖果数量不比右边孩子手里有的糖果数量大,就给左边的孩子发糖果,让左边孩子的糖果数量比右边孩子的糖果数量多一个。
class Solution {public int candy(int[] ratings) {int res=ratings.length;int s[]=new int[ratings.length];Arrays.fill(s,1);for(int i=0;i<ratings.length-1;i++){if(ratings[i+1]>ratings[i]&&s[i+1]<=s[i]){int temp=s[i+1];s[i+1]=s[i]+1;res=res+s[i+1]-temp;}}for(int j=ratings.length-1;j>0;j--){if(ratings[j-1]>ratings[j]&&s[j-1]<=s[j]){int temp1=s[j-1];s[j-1]=s[j]+1;res=res+s[j-1]-temp1;}}return res;}
}