返回一个二维数组中的最大子数组

可以将一个二维数组按行或列分为多个一维数组求最大子数组的和。

例如3*6的二维数组:

 

可以将这个二维数组num[][]的第一行赋值给一个一维数组s[]求出最大子数组和max = 16;

然后将第二行的值:s[j]=+num[1][j];求出s[]的最大子数组sum,和max比较,较大的赋值给max,第三行依旧如此,即可求出最大子数组和。

void readFile(){
        String record = null;
        int recCount = 0;
        int m = 0;
        int n = 0;
        int [] num = {0,0,0,0,0,0,0,0,0,0};
        int i = 0;
        int max = -2147483648;
        int sum = 0;
        try {
            FileReader fr = new FileReader("C:/Users/xiaoguoguo/Desktop/input1.txt");
            BufferedReader br = new BufferedReader(fr);
            record = new String();
            while ((record = br.readLine()) != null) {
                String[] split = record.split(",");
                recCount++;
                i = 0;
                for (String str1 : split){
                    if(recCount == 1){
                        m = Integer.parseInt(str1);
                    }
                    if(recCount == 2){
                        n = Integer.parseInt(str1);
                    }
                    if (recCount > 2 && recCount <= m+2){
                        num[i] = num[i]+Integer.parseInt(str1);
                        i++;
                    }
                }
                sum = TwoTest(n,num);
                max = Math.max(max, sum);
            }
            br.close();
            fr.close();
        } catch (IOException e) {
            System.out.println("Uh oh, got an IOException error!");
            e.printStackTrace();
        }
        System.out.println(max);
    }
int  TwoTest(int length,int number[]){
        Scanner x =new Scanner(System.in);
        int m = length;
        int sum = 0;
        int maxA=-2147483648;
        for (int i = 0;i<m;i++){
            sum+=number[i];
            maxA=max(maxA,sum);
            if(sum<0)sum=0;
        }
        //System.out.println(maxA);
        return maxA;
    }

 

posted @ 2022-03-23 22:02  Blue啊  阅读(21)  评论(0编辑  收藏  举报