2025-08-20 学习日记

发布于 2025-08-20 12:00 738 字 4 min read 手写 每个字都是我自己敲的。

2025-12-24 学习日记2025-12-17 学习日记2025-12-14 学习日记2025-12-09 学习日记2025-12-08 学习日记2025-12-07 学习日记2025-12-06 学习日记2025-12-05 学习日记2025-12-04 学习日记2025-12-03 学习日记2025-12-02 学习日记2025-12-01 学习日记2025-11-30 学习日记2025-11-29 学习日记2025-11-28 学习日记2025-11-27 学习日记2025-11-26 学习日记2025-11-25 学习日记2025-11-24 学习日记2025-11-23 学习日记2025-11-22 学习日记2025-11-21 学习日记2025-11-20 学习日记2025-11-19 学习日记2025-11-18 学习日记2025-11-17 学习日记2025-11-16 学习日记2025-11-15 学习日记2025-11-14 学习日记2025-11-13 学习日记2025-11-12 学习日记2025-11-11 学习日记2025-11-10 学习日记2025-11-09 学习日记2025-11-08 学习日记2025-11-07 学习日记2025-11-06 学习日记2025-11-05 学习日记2025-11-04 学习日记2025-11-03 学习日记2025-11-02 学习日记2025-11-01 学习日记2025-10-31 学习日记2025-10-30 学习日记2025-10-29 学习日记2025-10-28 学习日记2025-10-27 学习日记2025-10-26 学习日记2025-10-25 学习日记2025-10-24 学习日记2025-10-23 学习日记2025-10-22 学习日记2025-10-21 学习日记2025-10-20 学习日记2025-10-19 学习日记2025-10-18 学习日记2025-10-17 学习日记2025-10-16 学习日记2025-10-15 学习日记2025-10-14 学习日记2025-10-13 学习日记2025-10-11 学习日记2025-10-10 学习日记2025-10-09 学习日记2025-10-03 学习日记2025-10-02 学习日记2025-10-01 学习日记2025-09-30 学习日记2025-09-29 学习日记2025-09-28 学习日记2025-09-27 学习日记2025-09-26 学习日记2025-09-25 学习日记2025-09-24 学习日记2025-09-23 学习日记2025-09-22 学习日记2025-09-21 学习日记2025-09-20 学习日记2025-09-18 学习日记2025-09-17 学习日记2025-09-16 学习日记2025-09-15 学习日记2025-09-14 学习日记2025-09-13 学习日记2025-09-12 学习日记2025-09-11 学习日记2025-09-10 学习日记2025-09-09 学习日记2025-09-08 学习日记2025-09-04 学习日记2025-09-03 学习日记2025-09-02 学习日记2025-09-01 学习日记2025-08-31 学习日记2025-08-29 学习日记2025-08-28 学习日记2025-08-27 学习日记2025-08-26 学习日记2025-08-25 学习日记2025-08-24 周记2025-08-23 学习日记2025-08-22 学习日记2025-08-21 学习日记2025-08-20 学习日记2025-08-19 学习日记2025-08-18 学习日记2025-08-17 周记2025-08-16 学习日记2025-08-15 学习日记2025-08-14 学习日记2025-08-13 学习日记2025-08-12 学习日记2025-08-11 学习日记
今日学习记录 1. 统计全为 1 的正方形子矩阵leetcode.1277 关键词: 问题分析: 给你一个  的矩阵,矩阵中的元素不是  就是 ,请你统计并返回其中完全由  组成的 正方形 子矩阵的个数.没啥好说 核心思路 刚学完矩阵的二维前缀和,这道题就太简单了,但是与前缀和没有半毛钱关系,最最主要的是分析从主问题分解为子问题(思考方向),再从子问题收集答案向主问题靠齐(动态规划)...

今日学习记录

1. 统计全为 1 的正方形子矩阵leetcode.1277

关键词:动态规划 问题分析:

  1. 给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数.没啥好说

核心思路

  1. 刚学完矩阵的二维前缀和,这道题就太简单了,但是与前缀和没有半毛钱关系,最最主要的是分析从主问题分解为子问题(思考方向),再从子问题收集答案向主问题靠齐(动态规划)
  2. 主问题是目前的区域内最大的正方形的边是多少,不就是看围绕其的数是否为 1 么,若都为 1,则右下角的数也为一的话,不就是一个 2x2 的正方形么,总的来说就是求边的问题,看右下角这个数能组成什么样的正方形
  • 于是得到状态方程 dp{i+1,j+1} = min({dp{i+1,j},dp{i,j+1},dp{i,j}})+1;
  • 累加 dp{i+1,j+1}即为答案;

**最终代码:

int countSquares(vector<vector<int>>& matrix) {
        int r = matrix.size(),c = matrix[0].size();
        int ans = 0;
        for(int i = 0;i<r;i++){
            for(int j = 0;j<c;j++){
                if(matrix[i][j]){
                    if(i==0||j==0) ans++;
                    else{
                        matrix[i][j] = min({matrix[i-1][j],matrix[i][j-1],matrix[i-1][j-1]})+1;
                        ans += matrix[i][j];
                    }
                }
            }
        }
        return ans;
    }

学到的点:

  1. 动态规划

2. 二维区域和检索 - 矩阵不可变leetcode.304

关键词:前缀和 数组 问题分析:

  1. 就是给出一个矩阵,然后给出左上和右下坐标,求这个子矩阵内元素的总和

核心思路

  1. 直接暴力做肯定超时,因为每次都要遍历矩阵
  2. 对于范围的和,我们想到前缀和,但这个是二维的,我只能提供大概思路,要结合图片才能懂,跟一维数组前缀和一样的思路,先求怎么累加到最后一位,先求出整个的总和,初始化前缀和数组,再求子数组范围和

最终代码:

vector<vector<int>> arr;

    NumMatrix(vector<vector<int>>& matrix) {

        int r = matrix.size(),c = matrix[0].size();

        arr.resize(r+1,vector<int>(c+1));

        for(int i = 0;i<r;i++){

            for(int j = 0;j<c;j++){

                arr[i+1][j+1] = arr[i][j+1]+arr[i+1][j]-arr[i][j]+matrix[i][j];

            }

        }

    }

    int sumRegion(int row1, int col1, int row2, int col2) {

        return arr[row2+1][col2+1] - arr[row1][col2+1]-arr[row2+1][col1]+arr[row1][col1];

    }

学到的点:

  1. 二维数组的前缀和
  2. 求子矩阵总和

今日收获

  1. 新技巧

  2. 待加强

  3. 明日计划:

    • [ ]
    • [ ]

执笔 手写

随机文章

加载中...