本文共 754 字,大约阅读时间需要 2 分钟。
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
class Solution { public: int maxSubArray(vector & nums) { vector S; S.reserve(nums.size()); int pos = 0; int sum = 0; int Max = nums[0]; int flag = 0; for (int i = 0; i < nums.size(); i++) { Max = max(Max, nums[i]); if (nums[i] > 0) { break; } } if (Max <= 0) return Max; Max = 0; for (int i = 0; i < nums.size(); i++) { if (sum < 0) { pos = i; sum = 0; } Max = (Max > sum) ? Max : sum; sum = sum + nums[i]; } Max = (Max > sum) ? Max : sum; return Max; }};
分情况考虑:
如果全是负数:输出最大的负数; 如果有一个或一个以上的正数: sum表示从下标pos往后的最大和。如果sum<0,更新时直接从当前元素开始,sum=当前元素值,pos更新;如果sum>0,更新时累加当前元素。 Max会在迭代中更新。转载地址:http://neugn.baihongyu.com/