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

牛群的最大能量环

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param energy int整型一维数组
     * @return int整型
     */
    public int maxEnergyCircular (int[] energy) {
        // write code here
        int total = 0, curMax = 0, maxSum = energy[0], curMin = 0, minSum = energy[0];
        for (int a : energy) {
            total += a;
            curMax = Math.max(curMax + a, a);
            maxSum = Math.max(maxSum, curMax);
            curMin = Math.min(curMin + a, a);
            minSum = Math.min(curMin, minSum);
        }

        if (maxSum >= 0) {
            return Math.max(total - minSum, maxSum);
        } else {
            return maxSum;
        }
    }
}

编程语言是Java。

该题考察的知识点是动态规划。

代码的文字解释:

  • maxEnergyCircular方法接受一个整型数组energy作为参数,并返回一个整数。
  • 初始化变量total为0,用于记录能量数组的总和;curMaxmaxSum都初始化为energy[0],用于记录当前最大子数组和和最大子数组和;curMinminSum都初始化为energy[0],用于记录当前最小子数组和和最小子数组和。
  • 使用循环遍历能量数组中的每个元素a。在每次循环中,更新total为原值加上当前能量值a。更新curMax为当前能量值a和curMax + a的较大值,即记录当前最大子数组和。更新maxSum为当前最大子数组和curMax和之前的最大子数组和maxSum的较大值,即记录到目前为止的最大子数组和。更新curMin为当前能量值a和curMin + a的较小值,即记录当前最小子数组和。更新minSum为当前最小子数组和curMin和之前的最小子数组和minSum的较小值,即记录到目前为止的最小子数组和。
  • 循环结束后,根据最大子数组和maxSum的值判断:若maxSum大于等于0,说明最大子数组和可以跨越数组的首位连接起来,返回总和减去最小子数组和total - minSum和最大子数组和maxSum的较大值。若maxSum小于0,则无需跨越数组的首位,直接返回最大子数组和maxSum。
  • 返回最终的结果。
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:00
林子大了什么鸟都有啊,我觉得我说的已经很客气了,阴阳谁呢
牛客62656195...:应该不是阴阳吧?你第一次注册的时候boss就说你是牛人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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