牛客地址
解题思路
来回倒一遍,从左往右,如果arr[i] > arr[i-1] 则 tmp[i] = tmp[i-1] +1
从右往左,如果arr[j] > arr[j+1] 则 tmp[i] = Math.max(tmp[i], tmp[i+1] + 1); //注意:这里不是直接的tmp[i+1] + 1, 而是还需要和tmp[i]比较,选择其中最大的那个
源代码如下
import java.util.*;
public class Solution {
/**
* pick candy
* @param arr int整型一维数组 the array
* @return int整型
*/
public int candy (int[] arr) {
// write code here
if(arr == null || arr.length == 0){
return 0;
}
if(arr.length == 1){
return 1;
}
int len = arr.length;
int[] tmp = new int[len];
Arrays.fill(tmp, 1);
for(int i = 1; i < len; i++){
if(arr[i] > arr[i-1]){
tmp[i] = tmp[i-1] + 1;
}
}
for(int j = arr.length - 2; j >= 0; j--){
if(arr[j] > arr[j+1]){
tmp[j] = Math.max(tmp[j], tmp[j+1] + 1);
}
}
int count = 0;
for(int value : tmp){
count += value;
}
return count;
}
}