• 二维数组任意一矩形块中数的和的最大值


    设计思路:

      与之前求一维数组中连续子数组和的最大值方法相同。因为二维数组可以看做是几个一维数组的集合。例如:一个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));
        }
    
        }

    运行结果:

  • 相关阅读:
    网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP (转)
    利用Linux信号SIGUSR1调试程序
    hugepage优势
    Linux top命令中CPU信息的详解(转)
    如何快速学好Shell脚本? 转
    转:基于TLS1.3的微信安全通信协议mmtls介绍
    docker 支持ipv6 (核心要点是ndp需要把docker内的ip全部加入到ndplist中来)
    老毛子 Padavan 路由器固件开启教育网 IPv6 并实现IPv6转发
    Centos Firefox中文乱码
    浅析AnyCast网络技术
  • 原文地址:https://www.cnblogs.com/janeszj/p/10589101.html
Copyright © 2020-2023  润新知