分糖果問題
阿新 • • 發佈:2020-12-23
技術標籤:演算法
牛客地址
解題思路
來回倒一遍,從左往右,如果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; } }