NC130:分糖果问题

分糖果问题

http://www.nowcoder.com/questionTerminal/76039109dd0b47e994c08d8319faa352

解法1:左右各遍历一次

  • 把所有孩子的糖果数初始化为 1;

  • 先从左往右遍历一遍,如果右边孩子的评分比左边的高,则右边孩子的糖果数更新为左边孩子的 糖果数加 1;

  • 再从右往左遍历一遍,如果左边孩子的评分比右边的高,且左边孩子当前的糖果数不大于右边孩子的糖果数,
    则左边孩子的糖果数更新为右边孩子的糖果数加 1。

  • 通过这两次遍历, 分配的糖果就可以满足题目要求了。

    import java.util.*;
    public class Solution {
      /**
       * pick candy
       * @param arr int整型一维数组 the array
       * @return int整型
       */
      public int candy (int[] arr) {
          // write code here
          int[] tmp= new int[arr.length];
          Arrays.fill(tmp,1);
          int count=0;
    
          for(int i=1;i<arr.length;i++){
              if(arr[i]>arr[i-1]){
                  tmp[i]=tmp[i-1]+1;
              }
          }
           for(int i=arr.length-1;i>0;i--){
              if(arr[i-1]>arr[i]){
                  tmp[i-1]=Math.max(tmp[i-1],tmp[i]+1);
              }
          }
          for(int i:tmp)
              count+=i;
          return count;
      }
    }

    解法2:每次记录一个up连续上升的个数,down连续下降的个数,peak当前峰的高度

    图片说明

    import java.util.*;
    public class Solution {
      public int candy (int[] arr) {
          // write code here
          int up = 0, down = 0, peak = 1, res = 1;
          for (int i = 1; i < arr.length; i++) {
              res++;
              if (arr[i] > arr[i - 1]) {
                  up++;
                  res += up;
                  down = 0;
                  peak = up + 1;
              }
              else if (arr[i] == arr[i - 1]) {
                  up = 0;
                  down = 0;
                  peak = 1;
              }
              else {
                  up = 0;
                  res += down;
                  down++;
                  if (down >= peak) 
                     res++;
              }
          }
          return res;
      }
    }
名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论
解法2图文并茂,谢谢博主的分享!!!
点赞 回复 分享
发布于 2022-02-27 13:21
太强了,最后一个else的逻辑,以简洁的方式覆盖了多种情况,我脑子怎么也想不出来,牛!!!
点赞 回复 分享
发布于 2022-09-19 14:46 黑龙江
res++; 修改为初始化res = arr.length
点赞 回复 分享
发布于 2023-03-11 18:15 广东
算法题做了几十道,一道都不会
点赞 回复 分享
发布于 2023-11-02 19:07 湖北

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
评论
37
8
分享
牛客网
牛客企业服务