题解 | #牛群的最大能量环# 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 n = energy.length;
        int ans1;  // 最大能量值
        int[] dp1 = new int[n];  // 用于存储最大能量值的动态规划数组
        ans1 = energy[0];  // 初始化最大能量值为第一个元素
        for (int i = 0; i < n; i++) {
            if (i == 0) {
                dp1[i] = energy[i];
            } else {
                if (dp1[i - 1] >= 0) {
                    dp1[i] = energy[i] + dp1[i - 1];
                } else {
                    dp1[i] = energy[i];
                }
            }
            ans1 = Math.max(ans1, dp1[i]);  // 更新最大能量值
        }

        int[] dp2 = new int[n];  // 用于存储另一种情况下的动态规划数组
        int ans2 = 0;  // 另一种情况下的最小能量值
        for (int i = 1; i < n - 1; i++) {
            dp2[i] = Math.min(energy[i], dp2[i - 1] + energy[i]);
            ans2 = Math.min(ans2, dp2[i]);  // 更新另一种情况下的最小能量值
        }

        int sum = 0;  // 数组元素的总和
        for (int i = 0; i < n; i++) {
            sum += energy[i];  // 计算数组元素的总和
        }

        return Math.max(ans1, sum - ans2);  // 返回较大的能量值作为结果
    }
}

该代码使用的编程语言是Java。

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

代码的解释如下:

  1. maxEnergyCircular 方法是计算循环数组的最大能量值的主要方法。
  2. 代码中使用了两个动态规划数组 dp1 和 dp2
  3. dp1 数组用于存储一种情况下的最大能量值,其中 dp1[i] 表示以第 i 个元素为结尾的子序列的最大能量值。
  4. dp2 数组用于存储另一种情况下的最小能量值,其中 dp2[i] 表示以第 i 个元素为结尾的子序列的最小能量值。
  5. ans1 表示最大能量值,初始值为第一个元素的能量值。
  6. 第一个循环遍历数组,通过动态规划更新 dp1 数组和 ans1 的值,得到一种情况下的最大能量值。
  7. 第二个循环遍历数组(从第二个元素开始到倒数第二个元素),通过动态规划更新 dp2 数组和 ans2 的值,得到另一种情况下的最小能量值。
  8. 计算数组所有元素的总和存储在 sum 变量中。
  9. 最后返回较大的能量值,即 Math.max(ans1, sum - ans2)
全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
SmileDog12138:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务