题解 | #牛群的能量#

牛群的能量

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;
    }
}

知识点:

  1. 动态规划:一种通过将问题分解成子问题,并存储子问题的解来解决问题的方法。
  2. 子数组最大和问题:找到一个数组中,连续子数组的最大和。

解题思路:

使用一个动态规划数组 dp 来存储以每个位置为结束点的子数组的最大能量值之和。初始条件为 dp[0] = nums[0],然后我们从 i = 1 开始,逐步计算每个位置的最大子数组和,即 dp[i] = max(nums[i], dp[i - 1] + nums[i])。同时,我们维护一个变量 maxSum 来记录全局的最大子数组和,最终返回这个 maxSum。

全部评论

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务