(算法分析Week1)Maximum Subarray[Easy]
2017-09-09 12:06
274 查看
53. Maximum Subarray[Easy]
Description
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.
简要概括就是给出一个数组,找到能使和为最大的数组中连续位置上的数,返回最大的和。
Solution
遍历这个数组,从Arr[0]开始,如果maxSubarray(Arr, i - 1)> 0,那么最大和子数组会包括Arr[i]前的部分,否则,则重新开始计算,最大和子数组就由Arr[i]开始,和为Arr[i].具体做法如下:维护一个sum变量,使最大和的值为sum,sum+=Arr[i],当sum<0时,重置整个数组。
Complexity analysis
该算法遍历一次长度为n(n为数组中元素个数)的数组,时间复杂度为O(n),空间复杂度,原地工作,O(1)Code
class Solution { public: int maxSubArray(vector<int>& Arr) { int sum = 0; int temp = Arr[0]; //从第一个元素开始,遍历一次整个数组 for (int i = 0; i < Arr.size(); i++) { sum += Arr[i]; if (sum > temp) { temp = sum; } else { //只是为了ifelse结构完整 } if (sum < 0) { sum = 0; //重置 } else { //只是为了ifelse结构完整 } } return temp; } };
Result
相关文章推荐
- 算法第16周Maximum Subarray[easy]
- (算法分析Week18)1-bit and 2-bit Characters[Easy]
- (算法分析Week1)Majority Element[Easy]
- 算法分析与设计week09--53. Maximum Subarray
- (算法分析Week13)Relative Ranks[Easy]
- (算法分析Week2)Two Sum[Easy]
- leetcode 643[easy]--Maximum Average Subarray I
- Week 18算法分析作业
- 算法分析与设计丨第六周丨LeetCode(10)——Best Time to Buy and Sell Stock(Easy)
- Week 17算法分析作业
- LeetCode-Easy-Java-Maximum Average Subarray I
- Week 3算法分析作业
- Week 6算法分析作业
- (算法分析Week18)Subsets[Medium]
- 算法分析课每周练习 Binary Tree Maximum Path Sum
- 算法题目--Maximum Length of Repeated Subarray
- (算法分析Week10)Maximum Swap[Meduim]
- [leetcode Maximum Subarray]week 19
- LeetCode :: Maximum Subarray 详细分析
- 算法分析与设计week10--349. Intersection of Two Arrays