leetcode(53):Maximum Subarray

题目

  1. Maximum Subarray
    Easy
    Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
Follow up:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

思路

Dynamic Programming

这个算法又称为Kadane算法,它是又美国卡耐基梅隆大学的教授Kadane发明的一种用于求解最大连续子序列和问题的最优算法。对于一个长度为n的数组A而言,从A[0] 到 A[j] 是一个子数组(j<n),那么以A[j]结尾的子数组之最大和,要么是 A[j], 要么是 max(A[i]~A[j-1])+A[j] ,其中0 ≤ i ≤ j-1。这就是该算法设计的出发点。
下面我直接给出基于该算法实现的程序代码:
在这里插入图片描述

代码


	class Solution {
	public:
		int maxSubArray(vector<int>& nums) {
			if (nums.size() < 2)
				return nums[0];
			int maxNum = nums[0];
            int sum = maxNum;
				for (int i = 1; i<nums.size(); i++) {
					maxNum = max(maxNum + nums[i], nums[i]);
                    if(maxNum>sum)
                        sum =maxNum;
				}
				return sum;
		}
	};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值