题解 | #小美的平衡矩阵#

思路

使用前缀和

  • 使用前缀和(Prefix Sum)来快速计算任意子矩阵中 0 和 1 的数量。

代码如下:

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] matrix = new int[n + 1][n + 1];
        in.nextLine();

        // 注意 hasNext 和 hasNextLine 的区别
        int i = 1;
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            //System.out.println(str.length());
            for (int chIndex = 0; chIndex < str.length(); chIndex++) {
                matrix[i][chIndex + 1] = str.charAt(chIndex) - '0';
            }

            i++;

        }

        //Arrays.stream(matrix).forEach(item -> System.out.println(Arrays.toString(item)));

        int[][] dp = new int[n + 1][n + 1];
        int[] ret = new int[n + 1];

        for (int rowIndex = 1; rowIndex <= n ; rowIndex++) {
            for (int colIndex = 1; colIndex <= n; colIndex++) {
                dp[rowIndex][colIndex] = dp[rowIndex - 1][colIndex] + dp[rowIndex][colIndex - 1]
                                         -
                                         dp[rowIndex - 1][colIndex - 1] + matrix[rowIndex][colIndex];
            }
        }




        for (int j = 2; j <= n; j = j + 2) {
            for (int rowIndex = 1; rowIndex + j - 1 <= n; rowIndex++) {
                for (int colIndex = 1; colIndex + j - 1 <= n; colIndex++) {
                    int sum = dp[rowIndex + j - 1][colIndex + j - 1] - dp[rowIndex + j - 1][colIndex
                              - 1]
                              - dp[rowIndex - 1][colIndex + j - 1] + dp[rowIndex - 1][colIndex - 1];
                    if (sum == j * j / 2) {
                        ret[j]++;
                    }
                }
            }

        }

        for (int j = 1; j < n + 1; j++) {
            System.out.println(ret[j]);
        }
    }
}

参考文章链接:

【基础算法总结】前缀和

https://blog.csdn.net/2301_77900444/article/details/141491479?spm=1001.2014.3001.5506

小美的平衡矩阵(前缀和例题 -- 美团笔试编程题)

https://blog.csdn.net/weixin_44343938/article/details/137128412

全部评论

相关推荐

07-02 13:34
已编辑
门头沟学院 Java
mt六个字,让我破防了。昨天学校下午考完试然后被舍友拉着打游戏还喝的烂醉,然后三点睡七点起床上班,身上还是一股酒味。八点半上班八点到已经成为习惯了。mt是九点到的。今天是他拉我进项目的第一天,就是配环境了解项目。mt从九点到岗之后一坐就是一早上,一早上都在盯代码,偶尔指导一下其他实习生。中午十一点多点个外卖十二点午休吃外卖,边吃外卖边工作十多分钟吃完。吃完丢个外卖然后回工位接着工作。中午一点关灯休息mt还在工作回客户。我试探性问了一下mt“哥你平时有啥爱好?”mt愣了一下,“还有工作要做。”“还有工作要做”这短短的六个字。突然一下子给到我心灵巨大的震撼。我不知道这六个字背后是“我现在有工作做你先不要烦我。”还是“我没有其他的爱好,因为我的生活有很多工作要做。”自然我也是希望是前者。后者也许是我脑补出来的。但是看到mt真的像cpu一样整天都在工作我不免自我反思了一下。“好像我也没有爱好,似乎只有工作能够让我的内心踏实一些。如果不时刻除外一种腹背受敌的感觉,处在那种安逸放松的环境我会感觉到恐慌。”看到朋友圈别人出去旅游自然是羡慕,但是真的自己说“要不出去旅游”的时候,又想到要花很多钱,要用很多时间,也许那个地方并不好看。别人打游戏打的不亦乐乎的时候,我却觉得“这种游戏不就这个玩法吗也就只有这些结果了吧无非就是这样那样”。别人吃好吃的时候我也会羡慕但是真到自己要不吃点啥的时候“唉吃饱就行不花那么多钱钱存起来。”反正各种东西都羡慕,但是自己其实也没有很想做吧。是什么时候开始变成这样子的呢?也许从看到身边很多大一大二和其他学长学姐的人进大厂了的时候就已经有了。仿佛不在“正途”前行奔跑着,就是一种罪过。就像高三身体不舒适也硬撑着上课一样,在高三这样的环境放松就是罪过。在当下的就业环境也是这样吗?“曾迷途才怕追不上满街赶路人。”“仿似一路飞奔七八十岁。”也许我的一生,每一天都像mt一样度过了。
牛客在线求职答疑中心
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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