zoukankan      html  css  js  c++  java
  • 二维数组任意一矩形块中数的和的最大值

    设计思路:

      与之前求一维数组中连续子数组和的最大值方法相同。因为二维数组可以看做是几个一维数组的集合。例如:一个3×3的二维数组可以按行拆成3个一维数组。然后按求一维数组连续子数组的和求拆分后每一个子数组每一个子数组和,求得的每一个拆分后的数组的子数组和用一个List集合存起来。所以此处要用到三个List集合分别记录,相同的位置相加就形成一个矩形块(1,2行   1,2,3行   2,3行三种情况可加),加完之后的数据另外存入一个相同的List集合all,最后获取集合all中最大的值。即所求。

    源码:

    package ErWeishuzu;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Scanner;
    
    public class ErWeishuzu {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    //        int t[][]= {{1,2,3},
    //                    {4,5,6},
    //                    {7,8,9}};
            int t[][]=new int[3][3];
            Scanner input=new Scanner(System.in);
            for(int i=0;i<=2;i++)
            {
                for(int j=0;j<=2;j++)
                {
                    t[i][j]=input.nextInt();
                }
            }
            input.close();
        List<Integer> shuzu1=new ArrayList<Integer>();
        List<Integer> shuzu2=new ArrayList<Integer>();
        List<Integer> shuzu3=new ArrayList<Integer>();
            int o1[]=new int[3];//拆分二维数组
            for(int i=0;i<=2;i++)
            {
                o1[i]=t[0][i];
                shuzu1.add(o1[i]);
            }
            
            int o2[]=new int[3];
            for(int i=0;i<=2;i++)
            {
                o2[i]=t[1][i];
                shuzu2.add(o2[i]);
            }
            
            int o3[]=new int[3];
            for(int i=0;i<=2;i++)
            {
                o3[i]=t[2][i];
                shuzu3.add(o3[i]);
            }
            
            
            List<Integer> all1=new ArrayList<Integer>();//存每一个拆分获得的数组的连续子数组的和
            List<Integer> all2=new ArrayList<Integer>();
            List<Integer> all3=new ArrayList<Integer>();
            List<Integer> all=new ArrayList<Integer>();
            for(int j=-1;j<=(shuzu1.size()-2);j++)
            {
                int sum=0;
                for(int i=j+1;(i<=shuzu1.size()-1);i++)
                {
                    sum=sum+shuzu1.get(i);
                    //System.out.println(sum);
                    all1.add(sum);
                    all.add(sum);
                }
            }
            
            for(int j=-1;j<=(shuzu2.size()-2);j++)
            {
                int sum=0;
                for(int i=j+1;(i<=shuzu2.size()-1);i++)
                {
                    sum=sum+shuzu2.get(i);
                    //System.out.println(sum);
                    all2.add(sum);
                    all.add(sum);
                }
            }
            
            for(int j=-1;j<=(shuzu3.size()-2);j++)
            {
                int sum=0;
                for(int i=j+1;(i<=shuzu3.size()-1);i++)
                {
                    sum=sum+shuzu3.get(i);
                    //System.out.println(sum);
                    all3.add(sum);
                    all.add(sum);
                }
            }
            
            for(int i=0;i<=(all1.size()-1);i++)
            {
                int a,b,c;
                a=all1.get(i)+all2.get(i)+all3.get(i);
                all.add(a);
                b=all1.get(i)+all2.get(i);
                all.add(b);
                c=all2.get(i)+all3.get(i);
                all.add(c);
            
            }
            Collections.sort(all); 
            System.out.print("最大子数组的和:");
            System.out.println(all.get(all.size()-1));
        }
    
        }

    运行结果:

  • 相关阅读:
    查看mysql服务器连接
    读懂MySQL执行计划
    学会MySQL索引
    记一个有趣的Java OOM!
    高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存
    如何优雅的使用mybatis
    禁止页面后退JS(兼容各浏览器)
    如何做一个对账系统
    centos7.2进入单用户模式修改密码
    linux系统引导流程
  • 原文地址:https://www.cnblogs.com/janeszj/p/10589101.html
Copyright © 2011-2022 走看看