题解 | #分糖果问题#

分糖果问题

https://www.nowcoder.com/practice/76039109dd0b47e994c08d8319faa352

import java.util.*;


public class Solution {
    /**
     * pick candy
     * @param arr int整型一维数组 the array
     * @return int整型
     */
     // 贪心:局部最优为最优
    public int candy (int[] arr) {
        // 首先给每人一个
        int n = arr.length;
        int[] num = new int[n];
        for(int i=0;i<n;i++){
            num[i] = 1;
        }

        // 首先从左往右遍历,因为默认为1,所以左边的数不会大于右边的数,我们做判断然后不断更新数据
        for(int i=1;i<n;i++){
            if(arr[i] > arr[i-1]){
                num[i] = num[i-1] + 1;
            }
        }

        // 记录res返回结果,就是总糖果数(先统计上最后一个,然后从后往前遍历依次获得)
        int res = num[n-1];

        // 然后我们还需要从右往左遍历,因为可能出现左侧的值比右侧大,但是糖果数没有右侧多的情况
        for(int i=n-2;i>=0;i--){
            if(arr[i] > arr[i+1] && num[i] <= num[i+1]){
                num[i] = num[i+1] + 1;
            }
            res += num[i];
        }

        return res;
    }
}

全部评论

相关推荐

一天代码十万三:实习东西太少了,而且体现不出你业务,3个月不可能就这点产出吧,建议实习多写点,玩具项目面试官都不感兴趣的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务