求一个矩阵中最大的二维矩阵(元素和最大)

本文介绍了一种算法,用于在一维和二维矩阵中找到具有最大和的子矩阵。包括算法实现步骤、时间复杂度分析及C语言核心代码示例。

求一个矩阵中最大的二维矩阵(元素和最大). :
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是
:
4 5
5 3
要求:(1)写出算法;(2)分析时间复杂度;(3)C写出关键代码

 

public class FindMax2DimensionMatrix {
	public static void main(String args[]) {
		int arr[] = { -1, 2, -3, -1, 20, -100, -34 };
		System.out.println(findOneDimensionMaxSum(arr));
		//1 2 0 3 4
//		2 3 4 5 1
//		1 1 5 3 0
		int matrix[][] = {{1,2,0,3,4}, {2,3,4,5,1}, {1,1,5,3,0}};
//		System.out.println(execute(matrix));
		System.out.println(findOneDimensionMaxSumWithStep(arr, 4));
	}

	public static int findOneDimensionMaxSumWithStep(int[] oneDMatrix, int step){
		int max = 0;
		int tmp = 0;
		for (int i = 0; i < oneDMatrix.length - (step - 1); i++) {
			for(int j = 0; j < step; j++){
			    tmp += 	oneDMatrix[i + j];
			}
			
			if (max < tmp) {
				max = tmp;
			} 
			
			tmp = 0;
		}
		
		return max;
	}
	
	public static int findOneDimensionMaxSum(int[] oneDMatrix) {
		int max = 0;
		int tmp = 0;
		for (int i = 0; i < oneDMatrix.length; i++) {
			tmp = tmp + oneDMatrix[i];
			if (max < tmp) {
				max = tmp;
			} else {
				if (tmp < 0) {
					tmp = 0;
				}
			}
		}

		return max;
	}

	public static int execute(int[][] matrix) {
		int finalMax = 0;
		int tmp = 0;
		int height = matrix.length;
		int width = matrix[0].length;
		for (int j = 0; j < width - 1; j++) {
			int max = 0;
			for (int i = 0; i < height; i++) {
                tmp = max + matrix[i][j] + matrix[i][j + 1];
                if(tmp > max){
                	max = tmp;
                }
                
                if(tmp < 0){
                	tmp = 0;
                }
			}
			
			if(finalMax < max){
				finalMax = max;
			}
		}
		
		return finalMax;
	}
}



转载于:https://my.oschina.net/u/138995/blog/309353

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值