1. 程式人生 > 其它 >分糖果問題

分糖果問題

技術標籤:演算法

牛客地址

解題思路

來回倒一遍,從左往右,如果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;
    }
}