连续子数组的最大和

2021-02-03 07:15

阅读:531

标签:解答   要求   ==   复杂   array   时间   时间复杂度   else   忽略   

题目:

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

 

示例1:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
 

提示:

1 -100

 

解答:

窗口滑动问题,动态规划解决,设dp[i]为连续整数中最后一个整数为nums[i],所能够组成的最大和;则回退一步,如果dp[i]的前一个dp[i-1]

 1 class Solution {
 2     public int maxSubArray(int[] nums) {
 3         if(nums == null || nums.length == 1){
 4             return nums[0];
 5         }
 6         int len = nums.length;
 7         int [] dp = new int[len];
 8         dp[0] = nums[0];
 9         int max = dp[0];
10         for(int i=1;i){
11             if(dp[i-1]){
12                 dp[i] = nums[i];
13             }else{
14                 dp[i] = dp[i-1] + nums[i];
15             }
16             max = Math.max(max, dp[i]);
17         }
18         return max;
19     }
20 }

 

连续子数组的最大和

标签:解答   要求   ==   复杂   array   时间   时间复杂度   else   忽略   

原文地址:https://www.cnblogs.com/heaveneleven/p/12804194.html


评论


亲,登录后才可以留言!