题解 | #牛群的能量#
牛群的能量
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。