题目
分析
思路:
1、初始化一个数组dp,并全部填充为1,dp[i]表示当前孩子分配的糖果数;
2、从左向右遍历,如果arr[i+1] > arr[i],那么dp[i+1] = dp[i]+1;
3、从右向左遍历,如果arr[i-1] > arr[i]&&dp[i-1] <= dp[i],那么dp[i-1] = dp[i]+1;
4、对dp累加和即为最小糖果数。
import java.util.*;
public class Solution {
/**
* pick candy
* @param arr int整型一维数组 the array
* @return int整型
*/
public int candy (int[] arr) {
int[] res = new int[arr.length];
Arrays.fill(res,1);
int counter = 0;
for(int i = 1; i < arr.length; i++) {
if(arr[i] > arr[i-1]) {
res[i]= res[i-1] + 1;
}
}
for(int i = arr.length-2; i >= 0; i--) {
if(arr[i] > arr[i+1] && res[i] <= res[i+1]) {
res[i] = res[i+1] + 1;
}
}
for(int i : res) {
counter = counter + i;
}
return counter;
}
}