力扣--53. 最大子序和--動態規劃+滾動陣列
阿新 • • 發佈:2021-01-17
- 最大子序和
給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。
示例:
輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
進階:
如果你已經實現複雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。
詳細講解見我的另一篇部落格
程式碼:
#define Max(a,b) ((a)>(b)?(a):(b))
int maxSubArray(int* nums, int numsSize) {
if(numsSize==0)
return 0;
int dp[numsSize];
int max = nums[0];
dp[0]=nums[0];
for(int i=1;i<numsSize;i++)
{
dp[i]=Max(dp[i-1]+nums[i],nums[i]);
max=Max(dp[i],max);
}
return max;
}
滾動陣列優化:
int Max(int x,int y)
{
return x>y?x:y;
}
int maxSubArray (int* nums, int numsSize){
if(numsSize==0)
return 0;
int first,second;
first=nums[0];
int max = first;
for(int i=1;i<numsSize;i++)
{
second=Max(first+nums[i],nums[i]);
max=Max(second,max);
first=second;
}
return max;
}