贝克第四题

求大佬帮看看有什么问题,82%,

思路就是,用4个前缀数组,做一个递增的,一个递减的序列,然后更新min值找最小


import java.util.Scanner;


public class Main {


  public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    int n = input.nextInt();

    int[] nums = new int[n];

    for(int i = 0;i<n;i++)

      nums[i] = input.nextInt();

    System.out.println(minAdd(nums));

  }


  public static int minAdd(int[] nums) {

    int n = nums.length;

    int[] i_mods = new int[n];

    int[] d_mods = new int[n];

    int[] i_maxs = new int[n];

    int[] d_maxs = new int[n];

    for (int i = 0; i < n; i++) {

      if (i == 0) {

        i_mods[i] = 0;

        i_maxs[i] = nums[i];

        continue;

      }

      int max = Math.max(nums[i], i_maxs[i - 1] + 1);

      i_mods[i] = max - nums[i] + i_mods[i - 1];

      i_maxs[i] = max;

    }

    for (int i = n - 1; i >= 0; i--) {

      if (i == n - 1) {

        d_mods[i] = 0;

        d_maxs[i] = nums[i];

        continue;

      }

      int max = Math.max(nums[i], d_maxs[i + 1] + 1);

      d_mods[i] = max - nums[i] + d_mods[i + 1];

      d_maxs[i] = max;

    }

    int min = Integer.MAX_VALUE;

    for (int i = 0; i < n; i++) {

      int mod = i_mods[i] + d_mods[i] - (Math.min(i_maxs[i], d_maxs[i]) - nums[i]);

      min = Math.min(mod, min);

    }

    min = Math.min(i_mods[n-1],min);

    min = Math.min(d_mods[0],min);

    return min;

  }


}

#笔试题目##春招#
全部评论
……
点赞 回复 分享
发布于 2019-08-11 09:45
这是算法岗还是研发岗题目
点赞 回复 分享
发布于 2019-08-11 10:52

相关推荐

10-21 00:37
已编辑
门头沟学院 C++
小浪_Coding:你问别人,本来就是有求于人,别人肯定没有义务免费回答你丫, 有点流量每天私信可能都十几,几十条的,大家都有工作和自己的事情, 付费也是正常的, 就像你请别人搭把手, 总得给人家买瓶水喝吧
点赞 评论 收藏
分享
09-29 15:34
已编辑
北京航空航天大学 C++
做个有文化的流氓:结果是好的,过程不重要,而且你的offer太多了
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务