题解 | #牛群的能量#
牛群的能量
https://www.nowcoder.com/practice/00f87ddcd18842d0824d487fd70a730e?tpId=354&tqId=10594767&ru=/exam/company&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Fcompany
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param energy int整型一维数组
* @return int整型
*/
public int maxEnergy (int[] energy) {
// write code here
if (energy == null || energy.length == 0) {
return 0;
}
int n = energy.length;
int[] dp = new int[n];
dp[0] = energy[0];
int maxSum = dp[0];
for (int i = 1; i < n; i++) {
dp[i] = Math.max(energy[i], dp[i - 1] + energy[i]);
maxSum = Math.max(maxSum, dp[i]);
}
return maxSum;
}
}
知识点:
- 动态规划:一种通过将问题分解成子问题,并存储子问题的解来解决问题的方法。
- 子数组最大和问题:找到一个数组中,连续子数组的最大和。
解题思路:
使用一个动态规划数组 dp 来存储以每个位置为结束点的子数组的最大能量值之和。初始条件为 dp[0] = nums[0],然后我们从 i = 1 开始,逐步计算每个位置的最大子数组和,即 dp[i] = max(nums[i], dp[i - 1] + nums[i])。同时,我们维护一个变量 maxSum 来记录全局的最大子数组和,最终返回这个 maxSum。
