zoukankan      html  css  js  c++  java
  • 二维数组最大子数组问题

    设计思路:随机取数,然后以一个定点开始遍历求出它的所有的子数组,比较大小,如果比首先定义的max大 ,则替换,如果小,则继续比较。

    代码:

    package 二维数组最大子数组和;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class Two {
    
    public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		System.out.print("请输入数组的长度:");
    		Scanner sr=new Scanner(System.in);
    		int num=sr.nextInt();
    		int [][]arry=new int[num][num];    //创建数组 
    		Random a =new Random(num);                //随机取数
    		for(int i=0;i<num;i++)                    
    		{
    		for(int j=0;j<num;j++)
    		{
    			arry[i][j]=a.nextInt(200)-100;
    			System.out.print(arry[i][j]+"  ");
    		}
    			System.out.println();
    		}
    		System.out.println();
            int sum=0,max=arry[0][0],arryL=0,arryR=0,posL=0,posR=0;
    		for(int i=0;i<num;i++)
    		{
    			for(int j=0;j<num;j++)
    			{
    				for(int i1=i;i1<num;i1++)
    				{
    					for(int j1=j;j1<num;j1++)
    					{
    						for(int i2=i;i2<=i1;i2++)
    						{
    							for(int j2=j;j2<=j1;j2++)
    							{
    								sum=sum+arry[i2][j2];
    							}
    						  }
    							if(sum>=max)
    							{
    								 max = sum;
    		                          arryL = i;
    		                          arryR = j;
    		                          posL = i1;
    		                          posR = j1;
    							}
    							sum=0;
    						
    					}
    				}
    					
    			}
    			
    		}
    		
    		System.out.println("最大子数组和为:");
            System.out.println(max);
            System.out.println("最大子数组为:");
            for(int i = arryL;i <= posL;i++)
                for(int j = arryR;j <= posR;j++)
                {
                    System.out.print(arry[i][j] + "	");
                    if(j == posR)
                    {
                        System.out.print("
    ");
                    }
                }
            
      
    }
         
    }
    

    实验截图:

    反思:刚开始编这个程序的时候没有思路,想用以前那个一维数组的算法,可是感觉没有那么简单,没有成功,所以用了一个最笨的办法,以一个点开始遍历。虽然这个方法易懂,好求最大子数组的位置,但时间复杂度比较高,为n的六次方。

         

            

  • 相关阅读:
    MySQL严格模式总结
    python筛选关键字---error
    将pem证书转换成p12格式证书
    ## 游戏网关源码赏析
    pid获取
    顺序io_磁盘队列
    nsq源码阅读3_编译nsqd
    nsq源码阅读2_核心数据结构
    nsq源码阅读1_目录结构
    如何设计Mqtt的Retain?
  • 原文地址:https://www.cnblogs.com/twentytwo/p/4475608.html
Copyright © 2011-2022 走看看