一、题目描述
1.题目内容
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
2.题目示例
输入 nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。。
3.提示
1 <= arr.length <= 105
-100 <= arr[i] <= 100
注意:本题与主站 53 题相同:
53. 最大子序和
二、思路
前缀和。
对于每个数组元素计算其前缀和,因为原数组在保存前缀和之后无用处,则可以将其覆盖。
遍历前缀和数组,记录已经遍历过的最小前缀和和最大前缀和之间的差。
三、数据结构资料
本题无需要的数据结构。
四、代码
class Solution
{
public int maxSubArray(int[] nums)
{
int min = 0;
int result = nums[0];
for(int i = 0; i < nums.length; i++)
{
if(i != 0)
{
nums[i] = nums[i] + nums[i - 1];
}
if(nums[i] - min > result)
{
result = nums[i] - min;
}
if(min > nums[i])
{
min = nums[i];
}
}
return result;
}
}
五、复杂度分析
时间复杂度O(n)
空间复杂度O(1)
执行用时 | 时间击败比例 | 内存消耗 | 内存击败比例 |
---|---|---|---|
1ms | 99% | 44.9MB | 9% |