Java 题解 | #牛群的能量#

牛群的能量

https://www.nowcoder.com/practice/00f87ddcd18842d0824d487fd70a730e

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param energy int整型一维数组
     * @return int整型
     */
    public int maxEnergy (int[] energy) {
        // write code here
        Map<Integer, Integer> subEnergy = new HashMap<>();
        subEnergy.put(0, energy[0]);
        int max = subEnergy.get(0);
        for (int i = 0; i < energy.length; i++) {
            if (subEnergy.containsKey(i)) {
                continue;
            } else if (subEnergy.containsKey(i - 1)) {
                if (subEnergy.get(i - 1) >= 0) {
                    subEnergy.put(i, energy[i] + subEnergy.get(i - 1));
                } else {
                    subEnergy.put(i, energy[i]);
                }
                if (max <= subEnergy.get(i)) {
                    max = subEnergy.get(i);
                }
            }
        }
        return max;
    }
}

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

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

代码的解释如下:

  1. 定义了一个名为maxEnergy的函数,它接收一个整型数组energy作为参数,并返回一个整数。
  2. 创建了一个map<int, int>类型的变量subEnergy,用于存储子问题的能量值。
  3. 将第一个能量值energy[0]存入subEnergy中,并将其索引0作为键,能量值作为值。
  4. 将变量max初始化为subEnergy[0],表示当前的最大能量值。
  5. 使用循环从1到数组energy的长度,依次计算各个索引对应的子问题的能量值:如果subEnergy中已经包含当前索引,说明该子问题已经计算过,跳过本次循环。如果subEnergy中包含前一个索引i-1,根据题目要求的逻辑进行判断:如果前一个索引的能量值大于等于0,则将当前索引对应的能量值加上前一个索引的能量值,并存入subEnergy中。否则,直接将当前索引对应的能量值存入subEnergy中。更新最大能量值max,如果当前的子问题能量值大于max,则更新max为当前值。
  6. 返回max,作为函数的结果。
全部评论

相关推荐

牛客97567122...:我最近投的几个,都是要不已读不回,要不不回,还有直接拒绝的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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