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;
}

 

 

?代碼可能不是最好的,虛心交流,一起進步!?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章