最大子矩阵

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.microsoft;

public class MatrixUtil {
	public static long returnSumOfMaxSubMatrix(int[][] matrix) throws Exception {
		int [][]index=new int[4][2];
		index[0]=new int[]{0,0};
		index[1]=new int[]{0,matrix[0].length-1};
		index[2]=new int[]{matrix.length-1,0};
		index[3]=new int[]{matrix.length-1,matrix[0].length-1};
		
		
		return recuisiveMaxSubMatrix(index,matrix);
	}
	
	private static long recuisiveMaxSubMatrix(int[][] index,int[][] matrix){
		if(index[0][0]==index[3][0]&&index[0][1]==index[3][1]){
			return matrix[index[0][0]][index[0][1]];
		}
		int [][]topLeft=new int[4][2];
		topLeft[0]=index[0];
		topLeft[1]=new int[]{index[0][0],(index[0][1]+index[1][1])/2};
		topLeft[2]=new int[]{(index[0][0]+index[2][0])/2,index[0][1]};
		topLeft[3]=new int[]{(index[0][0]+index[2][0])/2,(index[0][1]+index[1][1])/2};
		int [][]topRight=new int[4][2];
		topRight[0]=new int[]{index[0][0],(index[0][1]+index[1][1])/2+1};
		topRight[1]=new int[]{index[1][0],index[1][1]};
		topRight[2]=new int[]{(index[0][0]+index[2][0])/2,(index[0][1]+index[1][1])/2+1};
		topRight[3]=new int[]{(index[0][0]+index[2][0])/2,index[1][1]};
		int [][]bottomLeft=new int[4][2];
		bottomLeft[0]=new int[]{(index[0][0]+index[2][0])/2+1,index[0][1]};
		bottomLeft[1]=new int[]{(index[0][0]+index[2][0])/2+1,(index[0][1]+index[1][1])/2};
		bottomLeft[2]=index[2];
		bottomLeft[3]=new int[]{index[2][0],(index[2][1]+index[3][1])/2};
		int [][]bottomRight=new int[4][2];
		bottomRight[0]=new int[]{(index[0][0]+index[2][0])/2+1,(index[0][1]+index[1][1])/2+1};
		bottomRight[1]=new int[]{(index[0][0]+index[2][0])/2+1,index[1][1]};
		bottomRight[2]=new int[]{index[2][0],(index[2][1]+index[3][1])/2+1};
		bottomRight[3]=index[3];
		long max1=recuisiveMaxSubMatrix(topLeft,matrix);
		long max2=recuisiveMaxSubMatrix(topRight,matrix);
		long max3=recuisiveMaxSubMatrix(bottomLeft,matrix);
		long max4=recuisiveMaxSubMatrix(bottomRight,matrix);
		long maxTop=Integer.MIN_VALUE;
		long max=0;
	
		for(int x1=topLeft[0][0];x1<=topLeft[2][0];x1++){
			for(int x2=x1;x2<=topLeft[2][0];x2++){
				for(int y1=topLeft[0][1];y1<=topLeft[1][1];y1++){
					for(int y2=topRight[0][1];y2<=topRight[1][1];y2++){
						max=0;
						for(int i=x1;i<=x2;i++){
							for(int j=y1;j<=y2;j++){
								max+=matrix[i][j];
							}
						}
						maxTop=Math.max(maxTop, max);
					}
				}
			}
		}
		
		long maxLeft=Long.MIN_VALUE;
		max=0;
		for(int x1=topLeft[0][0];x1<=topLeft[2][0];x1++){
			for(int x2=bottomLeft[0][0];x2<=bottomLeft[2][0];x2++){
				for(int y1=topLeft[0][1];y1<=topLeft[1][1];y1++){
					for(int y2=y1;y2<=topLeft[1][1];y2++){
						max=0;
						for(int i=x1;i<=x2;i++){
							for(int j=y1;j<=y2;j++){
								max+=matrix[i][j];
							}
						}
						maxLeft=Math.max(maxLeft, max);
					}
				}
			}
		}
		long maxBottom=Long.MIN_VALUE;
		max=0;
		for(int x1=bottomLeft[0][0];x1<=bottomLeft[2][0];x1++){
			for(int x2=x1;x2<=bottomLeft[2][0];x2++){
				for(int y1=bottomLeft[0][1];y1<=bottomLeft[1][1];y1++){
					for(int y2=bottomRight[0][1];y2<=bottomRight[1][1];y2++){
						max=0;
						for(int i=x1;i<=x2;i++){
							for(int j=y1;j<=y2;j++){
								max+=matrix[i][j];
							}
						}
						maxBottom=Math.max(maxBottom, max);
					}
				}
			}
		}
		
		long maxRight=Long.MIN_VALUE;
		max=0;
		for(int x1=topRight[0][0];x1<=topRight[2][0];x1++){
			for(int x2=bottomRight[0][0];x2<=bottomRight[2][0];x2++){
				for(int y1=bottomRight[0][1];y1<=bottomRight[1][1];y1++){
					for(int y2=y1;y2<=bottomRight[1][1];y2++){
						max=0;
						for(int i=x1;i<=x2;i++){
							for(int j=y1;j<=y2;j++){
								max+=matrix[i][j];
							}
						}
						maxRight=Math.max(maxRight, max);
					}
				}
			}
		}
		
		long maxFull=Long.MIN_VALUE;
		max=0;
		for(int x1=topLeft[0][0];x1<=topLeft[2][0];x1++){
			for(int x2=bottomLeft[0][0];x2<=bottomLeft[2][0];x2++){
				for(int y1=bottomLeft[0][1];y1<=bottomLeft[1][1];y1++){
					for(int y2=bottomRight[0][1];y2<=bottomRight[1][1];y2++){
						max=0;
						for(int i=x1;i<=x2;i++){
							for(int j=y1;j<=y2;j++){
								max+=matrix[i][j];
							}
						}
						maxFull=Math.max(maxFull, max);
					}
				}
			}
		}
		
		long result=Math.max(max1, max2);
		result=Math.max(result, max3);
		result=Math.max(result, max4);
		result=Math.max(result, maxTop);
		result=Math.max(result, maxLeft);
		result=Math.max(result, maxBottom);
		result=Math.max(result, maxRight);
		result=Math.max(result, maxFull);
		return result;
		
	}

	public static void main(String[] args) throws Exception {
		int[][] matrix = { { 9, -3, 7, -5 }, { -3, -4, 2, 0 }, { 7, 2, 2, -1 },
				{ -5, 0, -1, 6 } };
		long max = returnSumOfMaxSubMatrix(matrix);
		System.out.println("Max = " + max);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值