题意:给一列学生糖吃,这列学生各有一个rate,rate越大分到的糖就越多,最少分一颗糖;求一列学生至少的分糖总数。
思路:这题和trapping water类似,都需要从左往右和从右往左进行两次遍历,以从左往右为例,定义数组left[],当前的学生和左边的学生相比较,如果rate值是比左边的学生大的话,那就是left[i]+1,否则就置1;
从右往左类似。
代码:
package Candy;
public class Candy {
public int CandyTest(int []rates){
int []left = new int[rates.length+1];
int []right = new int[rates.length+1];
for(int i = 1 ; i< rates.length ; i++){
if(rates[i] > rates[i-1]) left[i] = left[i-1]+1;
else left[i] = 1;
}
right[rates.length-1] = left[rates.length-1];
for(int i = rates.length - 2; i >= 0 ;i--){
if(rates[i] > rates[i+1]) right[i] = right[i+1]+1;
else right[i]=1;
}
int sum = 0;
for(int i = 0 ; i< rates.length ; i++){
sum += Math.max(left[i], right[i]);
}
return sum;
}
public static void main(String[] args) {
int []rates = {3,2,4,6,5};
Candy cd = new Candy();
System.out.println(cd.CandyTest(rates));
}
}
432

被折叠的 条评论
为什么被折叠?



