2025-08-23 学习日记

发布于 2025-08-23 12:00 917 字 5 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 的最小矩形面积 IIleetcode.3197 关键词: 问题分析: 给定一个二维二进制数组 grid.你需要找到 3 个不重叠,面积非零,的矩阵,满足 grid 中的所有 1 都在这些矩阵中; 类似于 2025-08-22 中的第一题,但是难度从 1300 到 2500 的跳跃实在受不住,前一个题是找一个矩阵,这个题是找三个矩阵,没啥思路 核心思路...

今日学习记录

1. 包含所有 1 的最小矩形面积 IIleetcode.3197

关键词:矩阵 枚举 动态规划 问题分析:

  1. 给定一个二维二进制数组 grid.你需要找到 3 个不重叠,面积非零,的矩阵,满足 grid 中的所有 1 都在这些矩阵中;
  2. 类似于 2025-08-22 中的第一题,但是难度从 1300 到 2500 的跳跃实在受不住,前一个题是找一个矩阵,这个题是找三个矩阵,没啥思路

核心思路

  1. 没想到的是这个 2500 分的题居然可以用暴力做,分成三份,画一画图,把一个矩形分成三个矩形,也就 6 种分法,把其中的每各部分再按照 2025-08-22 中的第一题写就行
  2. 还有动态规划优化的手段,后续..

**最终代码:

class Solution {

    //顺时针转90°

    vector<vector<int>> restuts(const vector<vector<int>>&a){

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

        vector b(c,vector<int>(r));

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

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

                b[j][r-1-i] = a[i][j];

            }

        }

        return b;

    }

    //获取最小矩形面积

    //3195

    int minimumArea(const vector<vector<int>>&a,int u,int d,int l,int r){

        int left = r,right = 0;

        int h = d,bm = 0;

        for(int i = u;i<d;i++){

            for(int j = l;j<r;j++){

                if(a[i][j]){

                    left = min(left,j);

                    right = max(right,j);

                    h = min(h,i);

                    bm = max(bm,i);

                }

            }

        }

        return (right-left+1)*(bm-h+1);

    }

    //分块

    int solve(const vector<vector<int>>&a){

        int m = a.size(), n = a[0].size();

        int ans = INT_MAX;

  

        if (m >= 3) {

            for (int i = 1; i < m; i++) {

                for (int j = i + 1; j < m; j++) {

                    // 图片上左

                    int area = minimumArea(a, 0, i, 0, n);

                    area += minimumArea(a, i, j, 0, n);

                    area += minimumArea(a, j, m, 0, n);

                    ans = min(ans, area);

                }

            }

        }

  

        if (m >= 2 && n >= 2) {

            for (int i = 1; i < m; i++) {

                for (int j = 1; j < n; j++) {

                    // 图片上中

                    int area = minimumArea(a, 0, i, 0, n);

                    area += minimumArea(a, i, m, 0, j);

                    area += minimumArea(a, i, m, j, n);

                    ans = min(ans, area);

  

                    // 图片上右

                    area = minimumArea(a, 0, i, 0, j);

                    area += minimumArea(a, 0, i, j, n);

                    area += minimumArea(a, i, m, 0, n);

                    ans = min(ans, area);

                }

            }

        }

  

        return ans;

    }

public:

    int minimumSum(vector<vector<int>>& grid) {

        return min(solve(grid), solve(restuts(grid)));

    }

};

学到的点: 1.


今日收获

  1. 新技巧

  2. 待加强:

    • 动规
  3. 明日计划:

    • [ ]
    • [ ]

执笔 手写

随机文章

加载中...