53. Maximum Subarray(缺DP解)

来源:互联网 发布:连云港联通网络电视 编辑:程序博客网 时间:2024/06/06 08:29

问题描述

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

题目链接


思路分析

给出一个数组,要求返回最大的连续元素的和。

首先考虑数组中的元素都小等于零,那么返回的一定只有一个元素,就是这些数中最大的负数或者零;如果这个数组中有正数,那么这个连续子数组的开头第一个元素一定是正数。如果继续加上后继元素的话,后面是正数则和会越来越大;如果是负数就会减小,我们记录的最大值还是之前的那个;如果和小于零了,这个子数组就没有继续的必要了,将其置为下一个元素继续循环即可。

代码

class Solution {public:    int maxSubArray(vector<int>& nums) {        int result = INT_MIN, sum = 0, n = nums.size();        for (int i = 0; i < n; i++){            if (sum < 0)                sum = nums[i];            else                sum += nums[i];            if (sum > result)                result = sum;        }        return result;    }};

时间复杂度:O(n)


反思

百思不得其解的一个题目,道理很明白,但是绕了很久,主要是没有明确循环的内部判断条件。还有更快速的动态规划算法,有待补充。

原创粉丝点击