最大子串和
来源:互联网 发布:开发一个刷赞软件 编辑:程序博客网 时间:2024/05/19 19:44
最大子串和 根据算法竞赛入门经典实现
/思路:S[i]=A[1]+A[2]+……+A[i];A[j]+A[j+1]+……+A[i]=S[i]-S[j-1]/
/*#include<stdio.h>int max(int a,int b){ if(a>b) return a; return b;}int main(){ int B,i,j,n; int A[1010],S[1010]; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&A[i]); S[0]=0; for(i=1;i<=n;i++) S[i]=S[i-1]+A[i]; B=A[1]; for(i=1;i<=n;i++) { for(j=i;j<=n;j++) B=max(B,S[j]-S[i-1]); } printf("%d\n",B); return 0;}*/
改进:只要保证最 小的S[i-1]和最大的S[j]就行了
#include<stdio.h>int max(int a,int b){ if(a>b) return a; return b;}int main(){ int B,i,j,n,l,r,x,y; int A[1010],S[1010]; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&A[i]); S[0]=0; for(i=1;i<=n;i++) S[i]=S[i-1]+A[i]; l=r=x=y=1; for(i=1;i<=n;i++) { if(S[l]>S[i]) l=i; if(S[r]<S[i]) r=i; if(S[r]-S[l]>(S[x]-S[y])) { x=r; y=l; } if(S[i]<0) { r=l=i; } } printf("%d\n",S[x]-S[y]); return 0;}
阅读全文
0 0
- 最大子串和
- 最大和子串
- 子串最大和
- 最大子串和
- 最大子串和
- 最大和子串
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大子串和
- 最大连续子串和
- C语言总结
- HashMap的四种同步方式
- java 把byte转化为KB、MB、GB的方法
- USB 3G上网卡讲解之一
- 谈MVVM
- 最大子串和
- 约束布局constraint-layout导入失败的解决方案
- HDU5867-Water problem
- pgsql 计算时间差的秒数
- Leetcode OJ 24 Swap Nodes in Pairs [Medium]
- Unity3D 关于模型变形技术代码实现
- Swift 中的方法(函数)
- python-7
- Ruby:字符串处理函数