题解 | #最大子矩阵#

最大子矩阵

https://www.nowcoder.com/practice/1d889593a08645319d8d2fc8f804630e

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param matrix int整型ArrayList<ArrayList<>>
     * @return int整型
     */
    public int getMaxMatrix (ArrayList<ArrayList<Integer>> matrix) {
        /*
           dp
           题解:
           首先,最大子矩阵和最小子矩阵是同一回事。
           我们先求出矩阵每一列的前缀和sum[i][j],i为列号,j为行号,然后枚举一个开始的行和一个结束的行,
           然后问题就转化成了最大子数组问题,最大子数组的前缀和就是sum[j][ed]-sum[j][st-1]
           最大子数组的解法就是遍历一遍数组,如果当前数字和为正数,就更新答案,如果为负数,则从下一个位置开始重新求和。
        */
        int n = matrix.size();
        int m = matrix.get(0).size();

        int ans = matrix.get(0).get(0);
        for (int i = 0; i < n ; i++) {
            for (int j = 0; j < m ; j++) {
                ans = Math.min(ans, matrix.get(i).get(j));
            }
        }
        int mostmin = ans;
        for (int i = 0; i < n ; i++) {
            int[] help = new int[m];
            for (int row = i; row < n ; row++) {
                for (int col = 0; col < m ; col++) {
                    help[col] += matrix.get(row).get(col);
                }

                int cursum = f(help, mostmin);
                ans = Math.max(ans, cursum);
            }
        }

        return ans;
    }

    public int f(int[] arr, int max) {
        //max =Integer.MIN_VALUE;
        int tmp = 0;
        for (int i = 0; i < arr.length ; i++) {
            if (tmp > 0) tmp += arr[i];
            else
                tmp = arr[i];

            max = Math.max(max, tmp);
        }
        return max;
    }
}

全部评论

相关推荐

01-12 14:08
门头沟学院 Java
有寒假来武汉小米总部实习的大学生嘛,我也是小米的员工,想找合租舍友,仅限女生可免租半月,二月初可入住,也就是说房租是2.15开始算的哦~也可以将行李提前放过来~房屋介绍:1、房子情况:有电梯;租的是三室一厅一卫一厨,&nbsp;但是有个卧室比较小,不打算找人,只住两个人就可以了;衣柜也很大,可以放下很多衣服;房屋采光真的很好,早上起来可以在床上晒太阳的那种,十分惬意(夏季晚上十分好看!)2.&nbsp;楼下离我们很近的地方有小吃街和一个两层大超市(大概步行两分钟多就可以走到)&nbsp;,还有一个新开的麦当劳,晚上可以去吃小吃,购买物资也可以去大超市;3.&nbsp;房子基本设施齐备(洗衣机,冰箱,空调,油烟机,热水器);4.&nbsp;我有稳定的工作,生活中很注意卫生,周末有时间会自己做饭,可以投喂哦~5.&nbsp;出行:距离公交站步行10分钟不到,距政务中心,武汉小米总部三站(晚上我都是走回来的,很近的~);一个比较进的地铁,距离大概1km左右;出入我觉得很方便;6.&nbsp;房租:1150每月,押一付二,无物业费,也没有中介费和其他额外费用。7.&nbsp;民用水电燃气,用多少交多少,水电费正常平摊。希望你是:1.&nbsp;女生(本人女),不带异性回家,如有同性朋友来玩,最多过夜一晚;2.&nbsp;爱干净,讲卫生,作息正常,不吵闹,有稳定工作;3.&nbsp;好沟通,有任何问题一定要沟通,不要闷着!中介勿扰,非诚勿扰!!!希望不要浪费彼此的时间诚心有意向的可以联系我看房
租房找室友
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务