题解 | #牛群的最大能量环#

牛群的最大能量环

https://www.nowcoder.com/practice/653d5a6041a04b8cb9b082eeb1429d1c

知识点:动态规划

思路:

  1. 首先,定义一个名为maxEnergyCircular的静态方法,该方法接受一个整数数组作为参数,并返回一个整数。
  2. 找出能量数组中的最大值mx,如果mx小于0,则直接返回该值,因为数组中所有能量值都是负数。
  3. 获取能量数组的长度n
  4. 创建两个辅助数组lr,分别用于记录从左到右和从右到左的最大累积能量值。
  5. 使用for循环遍历能量数组,从左到右计算并保存累积能量值到数组l中。
  6. 使用另一个for循环从右到左计算并保存累积能量值到数组r中。
  7. 初始化变量resInteger.MIN_VALUE,用于存储最终的最大环形能量值。
  8. 使用一个for循环遍历数组lr,计算每个位置的最大环形能量值,并更新res为其中的最大值。
  9. 初始化变量sum为0,用于记录当前累积能量值。
  10. 使用增强型for循环遍历能量数组,计算和更新当前累积能量值,并根据需要更新res的值。
  11. 如果当前累积能量值sum小于0,则将其重置为0,因为负值对于最大环形能量值没有任何贡献。
  12. 循环结束后,返回res作为最大环形能量值。
  13. main方法中,创建一个示例用法,将一个能量数组作为参数传递给maxEnergyCircular方法,并打印出最大环形能量值。

编程语言:java

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param energy int整型一维数组
     * @return int整型
     */
    public static int maxEnergyCircular(int[] energy) {
        int mx = Arrays.stream(energy).max().getAsInt();
        if (mx < 0) return mx;

        int n = energy.length;
        int[] l = new int[n + 1];
        int[] r = new int[n + 1];

        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += energy[i - 1];
            l[i] = Math.max(l[i - 1], sum);
        }

        sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += energy[n - i];
            r[i] = Math.max(r[i - 1], sum);
        }

        int res = Integer.MIN_VALUE;
        for (int i = 0; i <= n; i++) {
            res = Math.max(res, l[i] + r[n - i]);
        }

        sum = 0;
        for (int x : energy) {
            sum += x;
            res = Math.max(res, sum);
            if (sum < 0) sum = 0;
        }

        return res;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务