0811 求数组最大串

#include <stdio.h>

void maxLineSum(int array[],int len){
	int max_endinghere=0;
	int max_sofar=0;
	int idx_max_endinghere_left=0;
	int idx_max_endinghere_right=0;
	int idx_max_sofar_left=0;
	int idx_max_sofar_right=0;

	for(int i=0;i<len;i++){
		if(max_endinghere<0){
			max_endinghere=array[i];
			idx_max_endinghere_left=idx_max_endinghere_right=i;
		}else{
			max_endinghere+=array[i];
			idx_max_endinghere_right=i;
		}

		if(max_sofar<max_endinghere){
			max_sofar=max_endinghere;
			idx_max_sofar_left=idx_max_endinghere_left;
			idx_max_sofar_right=idx_max_endinghere_right;
		}
	}

	for(i=idx_max_sofar_left;i<=idx_max_sofar_right;i++){
		printf("%d,",array[i]);
	}

}

void main(){
	int array[8]={-5,-3,5,6,9,10,-3,-8};
	maxLineSum(array,8);

}

  

   扩展一下,求一个矩阵的最大子矩阵:

#include<stdio.h>

void getMaxMatrix(int array[][3],int row ,int col){
	int max_endinghere=0;
	int max_sofar=0;
	int max_endinghere_row_min=0;
	int max_endinghere_row_max=0;
	int max_endinghere_col_min=0;
	int max_endinghere_col_max=0;
	int max_sofar_row_min=0;
	int max_sofar_row_max=0;
	int max_sofar_col_min=0;
	int max_sofar_col_max=0;

	int *b=new int[row];
	
    int tmp=0;
	for(int i=0;i<col;i++){
		for(int j=i;j<col;j++){
			max_endinghere_col_min=i;
			max_endinghere_col_max=j;
			for(int k=0;k<row;k++){
				for(int m=i;m<=j;m++){
					tmp+=array[k][m];
				}
				b[k]=tmp;
				tmp=0;
			}
		
			for(k=0;k<row;k++){
				if(max_endinghere<0){
					max_endinghere=b[k];
					max_endinghere_row_min=max_endinghere_row_max=k;
				}else{
					max_endinghere+=b[k];
					max_endinghere_row_max=k;
				}
				

				if(max_endinghere>max_sofar){
					max_sofar=max_endinghere;
					max_sofar_row_min=max_endinghere_row_min;
					max_sofar_row_max=max_endinghere_row_max;
					max_sofar_col_min=max_endinghere_col_min;
					max_sofar_col_max=max_endinghere_col_max;
				}
			}

			max_endinghere=0;  //注意这里

		}
	}

	printf("max_sofar_row_min=%d,max_sofar_row_max=%d\n",max_sofar_row_min,max_sofar_row_max);
	printf("max_sofar_col_min=%d,max_sofar_col_max=%d\n",max_sofar_col_min,max_sofar_col_max);
	printf("max_sofar=%d\n",max_sofar);


}

void main(){
	int array[3][3]={{1,-3,2},{-5,3,8},{1,9,-2}};
    getMaxMatrix(array,3,3);

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值