Maximum Subarray(leetcode)
来源:互联网 发布:mac多余账户删不了 编辑:程序博客网 时间:2024/06/05 03:06
Maximum Subarray
- Maximum Subarray
- 题目
- 解决
题目
leetcode
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.
解决
想法:题目要求在给定的数组里面找到一个连续的子数组,使得子数组中的数相加之后得到的和最大。而子数组有一个特征:contiguous
,这样我们可以根据这个特征来求得答案。
现在先举一个例子:原数组array为[-2,1,-3,4,-1,2,1,-5,4]
,符合上面题目要求的子数组有[-2,1]
、[-2,1,-3]
、[1,-3,4]
、[-1,2,1]
、[-2,1,-3,4]
、[-1,2,1,-5]
、[-2,1,-3,4,-1]
、[-1,2,1,-5,4]
等等。
从这些子数组我们可以发现,要在这些子数组里面得到一个数组的和最大的子数组,假设我们需要的答案为result,从array[0]开始对数组进行遍历,遍历过程中,数字累加得到sum,每次更新result值,result = (sum > result) ? sum : result
。
需要注意一点的是,如果原数组为[1,2,3,-2,-4,-3,5,5,4]
,预期的答案为14
,但是程序得出的结果却是11
。出现这样情况的原因:遍历到-3
的时候,此时,sum = -3
,不对sum进行处理会影响后面的结果。因此可以在sum < 0
的时候,重新将sum置零,这样就能够解决问题了。
class Solution {public: int maxSubArray(vector<int>& nums) { int num = nums.size(); int result = nums[0]; // 原数组可能只有一个数 int sum = 0; for (int i = 0; i < num; i++) { sum += nums[i]; result = (sum > result) ? sum : result; sum = (sum > 0) ? sum : 0; // 避免上面提到的问题 } return result; }};
- 【LeetCode】Maximum Subarray 和 Maximum Product Subarray
- LeetCode: Maximum Subarray
- LeetCode Maximum Subarray
- [Leetcode] Maximum Subarray
- LeetCode: Maximum Subarray
- leetcode 25: Maximum Subarray
- [LeetCode] Maximum Subarray
- [Leetcode] Maximum Subarray
- [LeetCode]Maximum Subarray
- [leetcode]Maximum Subarray
- LeetCode-Maximum Subarray
- [leetcode] Maximum Subarray
- LeetCode 45: Maximum Subarray
- LeetCode - Maximum Subarray
- LeetCode:Maximum Subarray
- LeetCode 53: Maximum Subarray
- 【leetcode】Maximum Subarray
- Leetcode Maximum Subarray
- MySQL binlog group commit--commit stage
- Python距离计算
- Linux kernel(内核)
- 3997: [TJOI2015]组合数学
- Android4.4上下如何根据uri获取文件的真是路径
- Maximum Subarray(leetcode)
- Python Flask框架连接Mysql 学习笔记
- 字符串输入的一些陷阱
- 账户结构,推广计划,推广单元
- okhttp框架学习
- maven依赖json-lib的jar包导入失败
- [unity3d] 模型XRay效果实现
- 初窥ajax(一) ——封装ajax
- Class文件结构