zoukankan      html  css  js  c++  java
  • 个人作业3

       二维数组求最大子矩阵的和

    简单分析 ; 二维数组 是一维数组的 扩充 

    先遍历一维数组的 子数组 

    在将 下一行与上一行相加 变成 n-1行 仍然是遍历一维数组 以此类推。但是时间复杂度比较大

    代码

    package main;
     
    import java.util.Scanner;
     
    
    public class SumOfSubMatrix {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    //        int arr[][]={{1,2,-3},{3,4,-5},{-5,-6,-7}};        
            Scanner sc= new Scanner(System.in);        
            while(sc.hasNext())
            {
                int n= sc.nextInt();
                int arr[][]=new int [n][n];
                for(int i=0;i<n;i++)
                {
                    for(int j=0;j<n;j++)
                    {
                        arr[i][j]=sc.nextInt();
                    }
                }            
                System.out.println(sumOfSubMatrix(arr,n));
            }
        }
     
        public static int sumOfSubMatrix(int a[][],int n)
        {
            int max=Integer.MIN_VALUE;        
            
            //res保存的是从 i 行 到第 j 行 所对应的矩阵上下值的和 
            for(int i=0;i<n;i++)
            {
                int res[]=new int[n];
                for(int j=i;j<n;j++)
                {                
                    for(int k=0;k<n;k++)
                    {
                        res[k]+=a[j][k];
                    }
                    int maxNum=sumOfSubArray(res);
                    if(maxNum>max)
                        max=maxNum;
                }
            }
            return max;        
        }
        
        public static int sumOfSubArray(int arr[])
        {
            if(arr.length==0||arr==null)
                return 0;
            int max=Integer.MIN_VALUE;
            int cur=0;
            for(int i=0;i<arr.length;i++)
            {
                cur+=arr[i];
                max=Math.max(max, cur);
                cur=cur<0?0:cur;
            }
            return max;        
        }
    }

  • 相关阅读:
    VS2008找不到MFC90d.dll错误解决方法
    字符编码之间的转换
    java 中使用RSA非对称性加密解密
    java eclipse中使用wsdl生成soap 的客户端代码
    java 打印空心菱形的两种实现
    Chrome 快捷键
    电脑常用快捷键
    VS2013常用快捷键
    Eclipse常用快捷键
    java 使用for循环打印杨辉三角形
  • 原文地址:https://www.cnblogs.com/1983185414xpl/p/10603187.html
Copyright © 2011-2022 走看看