求出前缀和,问题变成了O(n*n)复杂度的问题,但是仍然不能解决问题。 设prefix为前缀和,设i < j,一般都是通过算sum = prefix[j] - prefix[i]求和的最大值,但是本题中有取模,要求sum最大。 第一种情况:如果prefix[j] > prefix[i],sum < prefix[j],这种情况就不需要考虑了。 第二种情况:prefix[j]...
maxSubArray( nums[len(nums)//2: len(nums)] ) ## 计算跨终点数列的最大和: 拆成左边序列的最大和,加上右边序列的最大和 ## 从右到左,计算左子数组的总和 max_l = nums[len(nums)//2 - 1] ## 初始化为左区间最右边的那个值 cur_sum = 0 for i in range(len(nums)//2 - 1, -1, ...
分析:这道题是到很经典的题,关键点是要明白sum为负数的连续subarray对可能的最大值没有帮助(除该连续subarray的sum为largest sum外)。所以很简单的,如果sum小于0,我们便置sum为0。代码如下: classSolution {public:intmaxSubArray(intA[],intn) {intresult =INT_MIN;intsum =0;for(inti =0; i < n; i+...
FIND-MAXMIMUM-SUBARRAY(A, low, high): if high = low return (low, high, A[low]) else mid = floor((low+high)/2) (left-low, left-high, left-sum) = FIND-MAXMIMUM-SUBARRAY(A, low, mid) (right-low, right-high, right-sum) = FIND-MAXMIMUM-SUBARRAY(A, mid+1, high) (cross...
53. Maximum Subarray 做过很多次了,关键就是要理解 if(current_sum<0)current_sum=0 因为值已经小于0了,假设取后一位,那么加上现在的负值current_sum,结果一定比后一位小,所以直接舍去,置current_sum=0 int maxSubArray(vector<int>& nums) { int max_sum=0-(1<<31);...
def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ if not nums: return 0 current = nums[0] m = current for i in range(1, len(nums)): if current < 0: current = 0 current += nums[i] m = max(current, m) ...
Now to combine two arrays, the maximum subarray sum of the combined array would bemax(p(1)2,p(2)2,p(1)2+p(1)3+p(2)1+p(2)2)max(p2(1),p2(2),p2(1)+p3(1)+p1(2)+p2(2)). The remaining left and right side parts can be maintained easily. ...
Find-Max-Crossing-Subarray(A,low,mid,high):left-sum=-∞ # 在左边设置哨兵值,保存左边subarray中最大和 sum=0fori=mid down to low:# 在左边subarray中,sum值依次与哨兵值比较 sum=sum+A[i]ifsum>left-sum:# 若sum大,则保存至left-sum中left-sum=summax-left=iright-sum=-∞ # 在右边设置哨兵...
return maxSubSum; } } 另一种更加好理解的方法:本质上是dp.保持一个sum变量记录当前preSum, 在遍历时,如果当前sum < 0,就不要继续加nums[i]了,这样对于从nums[i]这里出发的subarray来说肯定不如只有nums[i]所构成的subarray sum大,这时候就更新为sum = nums[i]. ...
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. Example: Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Expla...