题目:

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。

样例:

给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6

思路:

采用动态规划的思想:维持两个变量,一个是目前最大和sum,一个是全局最大和sum_max.递推式是sum=max(sum+nums[i],nums[i])。

参考答案:

//时间复杂度O(n)
using namespace std;
class Solution {
public:
    /*
     * @param nums: A list of integers
     * @return: A integer indicate the sum of max subarray
     */
    int maxSubArray(vector<int> &nums) {
        // write your code here
        if(nums.size() == 0)
            return 0;
        
        int sum = nums[0];
        int sum_max = nums[0];
        int i; 
        for(i=1; i<nums.size(); i++)
        {
            sum = max(nums[i], sum+nums[i]);
        
            if(sum > sum_max)
            {
                sum_max = sum;
            }
        }
        return sum_max;
    }  
};

wydong
40 声望5 粉丝

wyd


« 上一篇
搜索二维矩阵
下一篇 »
最大子数组 II