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 int n = energy.length; int[] dp = new int[n]; dp[0] = energy[0]; int ans = dp[0]; for (int i = 1; i < n; i++) { if (dp[i - 1] >= 0) { dp[i] = energy[i] + dp[i - 1]; } else { dp[i] = energy[i]; } ans = Math.max(ans, dp[i]); } return ans; } }
编程语言是Java。
该题考察的知识点是动态规划。
动态规划是一种通过将问题拆分成更小的子问题来解决复杂问题的方法。它通常用于处理具有重叠子问题和最优子结构性质的问题。
代码的文字解释如下:
- 整型数组dp,长度为n,用于存储每个位置上的结果。
- 将数组dp的第一个元素dp[0]初始化为energy[0],表示只有一个能量值时的最大能量。
- 创建一个变量ans,用于记录最大能量值,初始化为dp[0]。
- 使用for循环从1开始遍历到n-1,计算dp[i]的值:如果dp[i - 1]大于等于0,说明前一个位置的最大能量值大于等于0,将当前位置的最大能量值设为energy[i]加上前一个位置的最大能量值dp[i - 1];如果dp[i - 1]小于0,说明前一个位置的最大能量值小于0,将当前位置的最大能量值设为energy[i]。
- 每次更新dp[i]后,将ans更新为当前最大能量值ans和dp[i]中的较大值。
- 循环结束后,返回ans作为最终的最大能量值。