精华内容
下载资源
问答
  • LeetCode矩形覆盖

    2020-06-10 21:37:20
    题目描述: 我们可以用2x1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2x1的小矩形无重叠地覆盖一个2xn的大矩形,总共有多少种方法? 思路: 由题目看出,f(n) = f(n - 1) + f(n - 2). 参考代码: 递归法: ...

    题目描述:

    我们可以用2x1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2x1的小矩形无重叠地覆盖一个2xn的大矩形,总共有多少种方法?

    思路:

    由题目看出,f(n) = f(n - 1) + f(n - 2).

    参考代码:

    1. 递归法:
    public static long RectCover1(int target) {
       if(target < 3)return target;
       return RectCover(target - 1) + RectCover(target - 2);
      }
    1. 非递归
    public static long RectCover(int target) {
       if(target < 3)return target;
       long pre1 = 1;
       long pre2 = 2;
       
       for(int i = 3; i<= target; i++){
        long sum = pre1 + pre2;
        pre1 = pre2;
        pre2 = sum;
       }
       return pre2;
      }
    展开全文
  • LeetCode-算法-矩形重叠

    2020-03-18 21:55:20
    力扣题目地址:https://leetcode-cn.com/problems/rectangle-overlap/ 首先看题目矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。 如果相交的面积为正,则称...

    力扣题目地址:https://leetcode-cn.com/problems/rectangle-overlap/

    首先看题目
    矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。

    如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。

    给出两个矩形,判断它们是否重叠并返回结果。

    示例

    示例 1:
    输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
    输出:true
    
    示例 2:
    输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
    输出:false
    

    解决思路
    方法一:图解法
    这个题目一拿到手,我就觉得这是一个非常简单的数学问题:在二维坐标轴上,一个数组给定两个坐标确定一个矩形;判断两个数组代表的矩形是否重叠。只有在第二个矩形的(x4,y4)坐标在第一个矩形的(x1,y1)的上方,并且第二个矩形的(x3,y3)坐标在第一个矩形的(x2,y2)的下方时,才会出现重叠的情况。这题目其实只要拿出纸笔,在纸上画出来就能很好的理解它了。

    方法二:检查区域法
    我们将两个矩形的两个坐标连成的线段,分别映射到x轴和y轴上;我们会发现,如果这两个矩形存在重叠部分,那么x轴和y轴的映射线段必定会相交。所以我们可以根据坐标点来判断这两条线段是否相交。

    代码实现:

    	/**
         * 方法一:图解法
         * https://leetcode-cn.com/problems/rectangle-overlap/
         * @param rec1
         * @param rec2
         * @author Geyuxuan 2020-03-18 20:53:28
         * @return boolean
         */
        public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
            if(rec2[2]>rec1[0] && rec2[3]>rec1[1] && rec2[0]<rec1[2] && rec2[1]<rec1[3]){
                return true;
            }
            return false;
        }
    
    	/**
         * 方法二:检查区域法
         * https://leetcode-cn.com/problems/rectangle-overlap/
         * @param rec1
         * @param rec2
         * @author Geyuxuan 2020-03-18 20:53:28
         * @return boolean
         */
        public boolean isRectangleOverlap1(int[] rec1, int[] rec2) {
            if(Math.min(rec1[2], rec2[2]) > Math.max(rec1[0], rec2[0]) && Math.min(rec1[3], rec2[3]) > Math.max(rec1[1], rec2[1])){
                return true;
            }
            return false;
        }
    

    不忘初心,砥砺前行。

    展开全文
  • 题目 矩形 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 题解 广度优先搜索 本题的本质就是寻找离1最近...

    题目 矩形

    给定一个由 01 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。

    两个相邻元素间的距离为 1
    在这里插入图片描述
    在这里插入图片描述

    题解 广度优先搜索

    本题的本质就是寻找离1最近的0,那么就可以从0出发进行搜索,一开始利用一个队列把所有的0都压入队列,并把1的位置改为-1表示未访问过。
    如果遇到符合要求的:表示它为当前距离+1

    if(pos_x >=0 && pos_x < row && pos_y >= 0 &&
          pos_y < col && mat[pos_x][pos_y] == -1){
       mat[pos_x][pos_y] = mat[x][y] + 1;
       q.push(make_pair(pos_x, pos_y));
    }
    

    完整代码如下:

    class Solution {
    public:
        const int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
            int row = mat.size();
            int col = mat[0].size();
            queue<pair<int, int>> q;
            for(int i = 0; i < row; ++i){
                for(int j = 0; j < col; ++j){
                    if(mat[i][j] == 0){
                        q.push(make_pair(i, j));
                    }
                    else{
                        mat[i][j] = -1;
                    }
                }
            }
            while(!q.empty()){
                auto [x, y] = q.front();
                q.pop();
                for(int i = 0; i < 4; ++i){
                    int pos_x = x + dir[i][0];
                    int pos_y = y + dir[i][1];
                    if(pos_x >=0 && pos_x < row && pos_y >= 0 && pos_y < col 
                          && mat[pos_x][pos_y] == -1){
                        mat[pos_x][pos_y] = mat[x][y] + 1;
                        q.push(make_pair(pos_x, pos_y));
                    }
                }
            }
            return mat;
        }
    };
    

    题目 地图分析

    你现在手里有一份大小为 N x N 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的。

    我们这里说的距离是「曼哈顿距离」( Manhattan Distance):(x0, y0)(x1, y1) 这两个单元格之间的距离是 |x0 - x1| + |y0 - y1|

    如果网格上只有陆地或者海洋,请返回 -1
    在这里插入图片描述

    题解 广度优先搜索

    上一题的本质是寻找离1最近的0,这一题刚好反过来,寻找离1最近的0的最远距离,则与上一题处理思路完全一样:

    class Solution {
    public:
       const int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        int maxDistance(vector<vector<int>>& grid) {
            queue<pair<int, int>> q;
            int row = grid.size();
            int col = grid[0].size();
            int cnt = 0;
            for(int i = 0; i < row; ++i){
                for(int j = 0; j < col; ++j){
                    if(grid[i][j] == 1){
                        q.push({i, j});
                        cnt++;
                        grid[i][j] = 0;
                    }
                    else{
                        grid[i][j] = -1;
                    }
                }
            }
            if(cnt == 0 || cnt == row * col)
                return -1;
            int x, y;
            while(!q.empty()){
                x = q.front().first;
                y = q.front().second;
                q.pop();
                for(int i = 0; i < 4; ++i){
                    int pos_x = x + dir[i][0];
                    int pos_y = y + dir[i][1];
                    if(pos_x >=0 && pos_x < row && pos_y >= 0 &&
                         pos_y < col && grid[pos_x][pos_y] == -1){
                        grid[pos_x][pos_y] = grid[x][y] + 1;
                        q.push({pos_x, pos_y});                   
                    }
                }
            }
            //int res;
            //for(int i = 0; i < row; ++i){
              //  res = max(res,*max_element(grid[i].begin(), grid[i].end()));
            //}
            return grid[x][y];
        }
    };
    

    总结

    多思考,多学习!

    展开全文
  • Leetcode 最大矩形

    千次阅读 2021-02-21 19:17:50
    最大矩形 题目描述: 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 提示:    rows == matrix.length    cols == ...

    最大矩形

    题目描述:

    给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
    提示:
       rows == matrix.length
       cols == matrix[0].length
       0 <= row, cols <= 200
       matrix[i][j] 为 '0' 或 '1'

    题目链接

    示例

    在这里插入图片描述

    输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
    输出:6
    解释:最大矩形如上图所示。
    class Solution {
        public int maximalRectangle(char[][] matrix) {
            int row = matrix.length;
            if(row == 0) return 0;
            int col = matrix[0].length;
            // 初始化
            int[][] heights = new int[row][col];
            for(int i = 0 ; i<col ; i++){
                for(int j = row-1 ; j>=0 ; j--){
                    if(matrix[j][i] == '1'){
                        heights[j][i] = ((j == row-1)?0:(heights[j+1][i]))+1;
                    }
                }
            }
            int max = 0;
            for(int i = 0 ; i<row ; i++){ // 遍历每一行
                int temp = largestRectangleArea(heights[i]);
                max = (max>temp)?max:temp;
            }
            return max;
        }
        private int largestRectangleArea(int[] heights) {
            int len = heights.length;
            if(len == 0) return 0;
            if (len == 1) return heights[0];
    
            int result = 0;
            Stack<Integer> stack = new Stack<>();
            for (int i = 0; i < len; i++) {
                while (!stack.empty() && heights[i] < heights[stack.peek()]) { // 如果当前遍历下标的高度严格小于下标为栈顶的元素高度
                    int curHeight = heights[stack.pop()];
                    while (!stack.empty() && heights[stack.peek()] == curHeight) { // 相等情况下去重
                        stack.pop();
                    }
    
                    int curWidth;
                    if (stack.empty()) {
                        curWidth = i;
                    } else {
                        curWidth = i - stack.peek() - 1;
                    }
                    result = Math.max(result, curHeight * curWidth);
                }
                stack.push(i);
            }
            // 最终处理
            while (!stack.empty()) {
                int curHeight = heights[stack.pop()];
                while (!stack.empty() && heights[stack.peek()] == curHeight) {
                    stack.pop();
                }
                int curWidth;
                if (stack.empty()) {
                    curWidth = len;
                } else {
                    curWidth = len - stack.peek() - 1;
                }
                result = Math.max(result, curHeight * curWidth);
            }
            return result;
        }
    }
    

    该题本质上就是单调栈的应用,读者可以首先理解完该题,再来解决此题。
    首先我们需要进行预处理,即对matrix矩阵每一列的连续1的个数记录到heights矩阵中,最后以一行一行的顺序进行单调栈操作,通过每一行的最大的矩形面积更新全局最大矩形面积。读者可以试着在草稿纸上模拟,详细请看代码。

    展开全文
  • LeetCode085——最大矩形

    千次阅读 2018-10-11 08:55:19
    我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:...思路:LeetCode084——柱状图中最大的矩形的变形 (1)对于二维数组matrix中的每一行,计算包括该...
  • 这道题目似曾相识啊,最大矩形面积的问题我们在LeetCode84.柱状图中最大的矩形也遇到过类似的问题,在84题中,我们应用了单调栈的方法,实现了O(n)的时间复杂度。在这一题中,我们可以将每一层都看做一个输入,比如...
  • 题目链接:https://leetcode-cn.com/tag/stack/ Stack堆栈使用方式,尽量不要使用Stack遗留类,使用Deque代替。 那么为什么要这么做呢?首先,我们可以发现Deque是继承自Queue,而Stack是继承自Vector,这就比较奇怪...
  • 文章目录前引题目链接 前引 这个题型整合不是说 题目全是Hard题目 而是我自己做过几遍 看到过好几次 每次基本上不看题解或者思考一个多小时都仍然觉得很棘手的题目集合 这个博客就哈哈 作为自己记录题目的一个整合...
  • leetcode-矩形覆盖-24

    2021-03-01 19:24:22
    题目要求   我们可以用21的小矩形横着或者竖着去覆盖更大的矩形,请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法? 思路   采用动归的方式。   问题:覆盖的方法个数。   状态F(i):...
  • 有一个函数 Sea.hasShips(topRight, bottomLeft) ,输入参数为右上角和左下角两个点的坐标,当且仅当这两个点所表示的矩形区域(包含边界)内至少有一艘船时,这个函数才返回 true ,否则返回 false 。 给你矩形的右...
  • Leetcode题目汇总

    2021-09-29 15:43:53
    题目目录 1) Array题型 2)List类型 3)String类型 4)HashTable类型 5)Math类型 6)Tree类型 1) Array题型 733.Flood Fill(对二维数组进行转换) 240.Search2D(查找数字) 57. Insert Interval (向一个区间中插入...
  • 题目描述 给定一个只包含 0 和 1 的网格,找出其中角矩形的数量。 一个 角矩形是由四个不同的在网格上的 1 形成的轴对称的矩形。注意只有角的位置才需要为 1。并且,4 个 1 需要是不同的。 示例 1: 输入: grid = ...
  • 枚举一个高度i,那么最大矩形就等价于84题中,柱子可能的高度,然后就可以在O(N^2)的时间复杂度解决这个问题,当然这道题目确实难度较大。一般面试中很少会出现。 class Solution { public: int ...
  • 文章目录题目描述本题要点解题思路1. 暴力破解2.利用单调栈完整代码性能结果 题目描述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的...
  • leetcode柱子题目总结

    2019-08-05 12:29:31
    算出共同的矩形面积不要在heights[i+1][i]在内部判断后计算,否则如果是持续递增的直方图,就会失去计算机会 class Solution { public: int largestRectangleArea(vector<int>& heights) { if(heights.empty...
  • LeetCode高频题目

    千次阅读 2019-10-11 09:55:32
    363 矩形区域不超过K的最大数值和(hard 中) 718 最长重复子数组(medium 中) 862 和至少为K 的最短子数组(hard 中) 300 最长上升子序列(medium 中) 50 pow(x, n)(medium 中) Code: link 327 区间和的个数...
  • [LeetCode]题目汇总

    2021-07-27 11:59:03
    题目 难度 解题过程 补充知识 1. 两数之和 简单 写出了暴力解法,学习了字典的用法 Python 字典(Dictionary) 2. 两数相加 中等 单链表的使用,不难 3. 无重复字符的最长子串 中等 滑动窗口,学习了集合的...
  • 矩形覆盖:用2x1的小矩形横着竖着去覆盖更大的矩形,请问用n个2x1的小矩形去覆盖一个2xn的大矩形,共有多少种方法? 题目分析 此题跟LeetCode题8的解题方法其实是一样的,都是用1或者2表示n, 表示方法共有几种 根据...
  • 一、高频题 1、高频题 1.1、199-...2.6、363-矩形区域不超过 K 的最大数值和 3、低频题 3.1、1856-子数组最小乘积的最大值 3.2、1825-求出 MK 平均值 3.3、1673-找出最具竞争力的子序列 3.4、346-数据流中的移动平均值
  • leetcode 836. 矩形重叠

    2020-03-18 21:51:08
    class Solution: def isRectangleOverlap... # 给定了两个矩形,可以算出两个矩形围住的点,包括边上的 # 两个点集合取交集,如果交集的数量大于较小矩形的一边,则有重叠 # 如果两个矩形围住的点集相交了,那么...
  • LeetCode 836. 矩形重叠

    千次阅读 2020-04-27 19:19:29
    1. 题目 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。 如果相交的面积为正,则称两矩形重叠。 需要明确的是,只在角或边接触的两个矩形不构成重叠。 给出两个...
  • LeetCode 刷题题目总结

    2020-05-15 23:02:06
    文章目录前言LeetCode 总结整数反转字符串中的第一个唯一字符有效的字母异位词字符串转换整数实现 strStr()跳跃游戏盛最多水的容器统计「优美子数组」在排序数组中查找元素的第一个和最后一个位置搜索二维矩阵相对...
  • LeetCode矩形区域【223】 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。 每个矩形由其左下顶点和右上顶点坐标表示,如图所示。 示例: 输入:-3, 0, 3, 4, 0, -1, 9, 2输出:45 说明...
  • 题目链接 题目描述: 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。 如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠...
  • 矩形重叠(Java题目描述题目分析代码 题目描述 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。 如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边...
  • 代码放置在github中:https://github.com/isthegoal/leetcode_top125 使用了大量注释进行了题目 方案的解读。(类似形式如下) 题目 1 两数之和 42.20% Easy 2 两数相加 30.70% Medium 3 无重复字符的最长子串...
  • 题目 题目描述 难度 1 679 24 点游戏 你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过*,/,+,-,(,)的运算得到 24。 困难 2 546 移除...
  • LeetCode构造矩形

    2021-10-23 19:31:19
    #LeetCode#打卡每日一题之构造矩形 题目要求: 你设计的矩形页面必须等于给定的目标面积。 宽度 W 不应大于长度 L,换言之,要求 L >= W 。 长度 L 和宽度 W 之间的差距应当尽可能小。 你需要按顺序输出你...
  • 题目描述 给出一个只包含0和1的二维矩阵,找出最大的全部元素都是1的长方形区域,返回该区域的面积。 基本思路: 采取H[]描述累积高度,即若当前元素m[i]=='1' 那么原先高度 H[i]++ 否则 H[i]=0 (短板效应...
  • leetcode题目总结

    2020-01-12 01:50:49
    题目名称 题目简述 5144矩阵区域和-中 稍微变化了一下的二维前缀和。注意不要越界 1310. 子数组异或查询-中 异或前缀和 哈希 题目名称 题目简述 不同的循环子字符串-良 题目写的不清楚,我还以为要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,859
精华内容 1,543
关键字:

leetcode矩形题目