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。
该题考察的知识点是动态规划。
代码的解释如下:
- 定义了一个名为
maxEnergy的函数,它接收一个整型数组energy作为参数,并返回一个整数。 - 创建了一个
map<int, int>类型的变量subEnergy,用于存储子问题的能量值。 - 将第一个能量值
energy[0]存入subEnergy中,并将其索引0作为键,能量值作为值。 - 将变量
max初始化为subEnergy[0],表示当前的最大能量值。 - 使用循环从1到数组
energy的长度,依次计算各个索引对应的子问题的能量值:如果subEnergy中已经包含当前索引,说明该子问题已经计算过,跳过本次循环。如果subEnergy中包含前一个索引i-1,根据题目要求的逻辑进行判断:如果前一个索引的能量值大于等于0,则将当前索引对应的能量值加上前一个索引的能量值,并存入subEnergy中。否则,直接将当前索引对应的能量值存入subEnergy中。更新最大能量值max,如果当前的子问题能量值大于max,则更新max为当前值。 - 返回
max,作为函数的结果。

