题目如下:
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
提示:
1 <= arr.length <= 10^5
-100 <= arr[i] <= 100
解题思路:
本题题目要求使用时间复杂度为O(n)的算法,那么显然最多只能对整个数组扫描一遍。那么如何只在扫描一遍数组中找到和最大的子数组呢?
设置一个变量sum,初始值为0,在扫描中累加计算,如果一旦出现sum<0,那么就更新sum重新为0 。并且每次累加一个数组元素都进行一次与MAX的判断,如果sum>MAX那么更新MAX,最后扫描完整个数组就能得到子数组的最大和。
代码:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int MAX=-999; //设置MAX初始值 小于-100即可
int sum=0; //sum初始值
for(int i=0;i<nums.size();i++){
sum+=nums[i];
if(sum>MAX){ //每次都要判断
MAX=sum;
}
if(sum<0){
sum=0;
}
}
return MAX;
}
};
总结:
其实这题挺简单的,我还是弄了快二十分钟,实在是菜狗TAT....
加油!
今日份开心:
开心!