动态规划剑指 Offer 42. 连续子数组的最大和(简单)

Posted 煮雪烧茶的刷题日记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划剑指 Offer 42. 连续子数组的最大和(简单)相关的知识,希望对你有一定的参考价值。

让我们先来看看这道题目的描述

关于这道题目,因为连续两字出现,我们不由得想到了前缀和,先不考虑题目要求的时间复杂度的限制

方法一:前缀和

class Solution { public int maxSubArray(int[] nums) { int n = nums.length; int[] dp = new int[n + 1]; for(int i = 1; i <= n; ++i){ dp[i] = dp[i - 1] + nums[i - 1]; } int max = nums[0]; for(int i = 0; i < n; ++i){ for(int j = i + 1; j <= n; ++j){ max = Math.max(max, dp[j] - dp[i]); } } return max;
}}

提交发现会TLE,让我们再来给出一个时间复杂度为O(n)的答案

方法二:动态规划

这道题目属于动态规划中比较简单的题目

我们用dp[i]来表示以第i个数结尾的子串的最大和,所以代码就很显然了

class Solution { public int maxSubArray(int[] nums) { int n = nums.length; int[] dp = new int[n]; dp[0] = nums[0]; int max = dp[0]; for(int i = 1; i < n; ++i){ dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]); max = Math.max(max, dp[i]); } return max;
}}

这道题目属于动态规划中简单的范畴,比如子串子序列这种类型的动态规划,一定要轻松拿下~

2022秋招马上就要开始了,你刷了多少题呢?

以上是关于动态规划剑指 Offer 42. 连续子数组的最大和(简单)的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer动态规划42. 连续子数组的最大和

剑指offer-面试题42-连续子数组的最大和-动态规划

什么?动态规划10行求出连续子数组的最大和 剑指offer-42讲解

动态规划剑指 Offer 42. 连续子数组的最大和(简单)

剑指offer(C++)-JZ42:连续子数组的最大和(算法-动态规划)

剑指offer(C++)-JZ42:连续子数组的最大和(算法-动态规划)