輸入乙個長度為n的整數序列,從中找出一段不超過m的連續子串行,使得整個序列的和最大。
例如 1,-3,5,1,-2,3
當m=4時,s=5+1-2+3=7
當m=2或m=3時,s=5+1=6
戳戳戳
一開始用的樸素的 錯的 演算法 。過了 9個點。
然後決定考慮 優化。
讓我們來枚舉子序列中的 最後一位,用s[i]表示 到a[i]的 序列和
所以 ans=s[i]-min(s[j])【j≥i-m】
因為sum是不變的所以我們只用求 最小的s【j】 即可
所以我們來維護乙個單調序列滿足
1.單調遞增
2.棧中元素不能 超過m個
所以看**吧
#include#include#include//by mars_ch
using namespace std;
int n,m;
int a;
int ans;
int sum;
int f[300005];
int s[300005];
int main()
// printf("%d %d\n",t,sum);
f[t]=sum;
s[t++]=i;
/************保證個數不超過m**************/
while(i-s[h]>m) h++;
ans=max(ans,sum-f[h]);
}printf("%d\n",ans);
return
0;}
然後完美
lectcode 陣列 最大自序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。int maxsubarray vector nums return max int maxsub...
leetcode 53 最大自序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。思路 簡單題,維...
leetcode 53 最大自序和
題目 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解 原始碼 掃...