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));
        }
    
        }

    运行结果:

  • 相关阅读:
    如何修改ls命令列出来的目录颜色
    如何替换vi的配色方案
    grep如何结尾匹配
    机器学习模型如何转换成零依赖代码
    在ubuntu bionic下对基于qemu的arm64进行linux内核5.0.1版本的编译和运行
    分析linux内核中的slub内存管理算法
    windows下如何解决chrome浏览器左下角总提示'Downloading proxy script'的问题
    发现vi出现此错误~/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so: undefined symbol: clang_getCompletionFixIt
    打开vi后提示The ycmd server SHUT DOWN (restart with :YcmRestartServer)该如何处理
    ubuntu下如何修改时区和时间
  • 原文地址:https://www.cnblogs.com/janeszj/p/10589101.html
Copyright © 2011-2022 走看看