1. 首页
  2. 软件开发
  3. day-23 分发糖果

day-23 分发糖果

  • 发布于 2024-09-26
  • 1 次阅读

参考了答案。。。。。。

思路:所有位置的糖果数应该满足左规则和右规则 左规则:如果ratings[i]>ratings[i-1],则应该比左边多一颗糖果 右规则:如果ratings[i]>ratings[i+1],则应该比右边多一颗糖果 最终糖果数为ans[i]=Math.max(left[i],right[i])

code:

class Solution {

    public int candy(int[] ratings) {

        int n=ratings.length;
        int left[]=new int[n];
        int right[]=new int[n];
        int ans[]=new int[n];
        Arrays.fill(left,1);
        for(int i=1;i<n;i++){
   //满足左规则
            if(ratings[i]>ratings[i-1]){

                left[i]=left[i-1]+1;
            }
        }
        for(int i=0;i<n;i++){

            right[i]=left[i];
        }
        for(int i=n-2;i>=0;i--){
   //满足右规则
            if(ratings[i]>ratings[i+1]){

                right[i]=right[i+1]+1;
            }
        }
        for(int i=0;i<n;i++){

            ans[i]=Math.max(left[i],right[i]);
        }
        int total=0;
        for(int i=0;i<n;i++){

            total+=ans[i];
        }
        return total;
    }
}

原文链接: https://blog.csdn.net/qq_53568730/article/details/136801833