LeetCode53-最大子序和
2019-03-16 14:22
253 查看
LeetCode53-最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
一、思路
先设想几类情况:
1、当前要加入的num是负数
这种情况下无疑会使得原来的连续子数组之和减小,那么该不该放弃这个数重新找个子数组呢?
-
如果加入之后,整个连续子数组之和大于等于0,那么这个子数组的效益还是非负的,考虑从下一个数之后的子数组之和如果能够大于|num|,那么相加,一定会大于原来连续子数组之和,因此不能放弃
-
如果加入之后,整个连续子数组之和小于0,那么这个连续子数组的效益就是负的了,必须放弃
2、当前要加入的num是正数
无论原来的连续子数组之和是多少,将这个num加入,总会比原来的数值大
C++ 代码:
class Solution { public: int maxSubArray(vector<int>& nums) { int max = nums[0], cur = 0, max_num = nums[0]; vector<int> cur_num; for (auto num : nums) { if (num > max_num) max_num = num; if (num >= 0) cur += num; else { if (cur + num < 0) { cur = 0; continue; } else cur += num; } if (cur > max) max = cur; } return (max > max_num) ? max : max_num; } };
执行效率:
相关文章推荐
- LeetCode53. 最大子序和
- LeetCode53. 最大子序和(Java)
- Leetcode(53) 最大子序和
- Leetcode53.最大子序和(python3)
- 【LeetCode】[53] 最大子序和 (动态规划)###
- Leetcode53.最大子序和
- LeetCode53最大子序和
- LeetCode - 53. 最大子序和
- Leetcode 53:最大子序和(Maximum Subarray)
- Leetcode 53. 最大子序和
- leetcode的python实现 刷题笔记53:最大子序和(多种解法)
- LeetCode题库解答与分析——#53.最大子序和MaximumSubarray
- Leetcode 53 Maximum Subarray 最大子串和
- leetcode 53.最大自子序和
- Scala Maximum Subarray 最大子串 leetcode 53
- leetcode-最大子序和(动态规划讲解)
- leetcode 053 最大子序和
- Leetcode题库-最大子序和(java语言版)
- 最大子序和 - LeetCode
- leetcode-53 Maximum Subarray 连续子数组的最大和