01-复杂度2 Maximum Subsequence Sum 总结

最近在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;
}

?代码可能不是最好的,虚心交流,一起进步!?

发布了5 篇原创文章 · 获赞 3 · 访问量 351

猜你喜欢

转载自blog.csdn.net/Young_IT/article/details/102245076
今日推荐