最近在MOOC大学学习浙大的数据结构,也跟着课件做了PTA的试题。
总结下编程题第二题<01-复杂度2 Maximum Subsequence Sum>
原题如下:
第一次提交:
测试点2:并列和对应相同i但是不同j,即尾是0
起初没理解什么意思,误以为是子序列最后一个0不取,如下:
10
-1 0 1 2 3 4 0 -5 -9 -2
10 1 4
却忘了题目所说的‘output the one with the smallest indices i and j ’(取最小索引i和j)
1 2 3 4 前面的 0 也是要取的,正确如下:
10
-1 0 1 2 3 4 0 -5 -9 -2
10 0 4
0和4才使i、j最小。
最后ACE代码如下:
#include<stdio.h>
void findMax( int a[], int k);
int main(){
int k=0,n,sum=0,max=0;
scanf("%d",&k);
int a[k];
for( n=0; n<k; n++){
scanf("%d",&a[n]);
}
findMax(a, k);
return 0;
}
void findMax( int a[], int k){
int sum=0,max=0,i=-1,j=-1,n,key=1,flag=1,p;
for( n=0; n<k; n++ ){
sum += a[n];
if( a[n] == 0 && max == 0 ){
i = n;
j = n;
}
if( sum < 0 ){
sum = 0;
flag = 1;
}
if( (sum > 0||a[n] == 0) && flag==1){
p = n;
flag = 0;
}
if( sum > max ){
max = sum;
i = p;
j = n;
}
if( a[n] > 0 ){
key = 0;
}
}
if(key&&i<0){
i = 0;
j = k-1;
}
printf("%d ",max);
printf("%d ",a[i]);
printf("%d",a[j]);
return;
}
?代码可能不是最好的,虚心交流,一起进步!?