代码编织梦想

题目

剑指 Offer II 040. 矩阵中最大的矩形

在这里插入图片描述

思路

所有的矩形一定以某一排为底,高为这一排

面试题39是关于最大矩形的,这个题目还是关于最大矩形的,它们之间有没有某种联系?如果能从矩阵中找出直方图,那么就能通过计算直方图中的最大矩形面积来计算矩阵中的最大矩形面积

直方图是由排列在同一基线上的相邻柱子组成的图形。由于题目要求矩形中只包含数字1,因此将矩阵中上下相邻的值为1的格子看成直方图中的柱子

在将矩阵转换成多个直方图之后,就可以计算并比较每个直方图的最大矩形面积,所有直方图中的最大矩形也是整个矩阵中的最大矩形

代码

public int maximalRectangle(String[] matrix) {
    if (matrix.length == 0 || matrix[0].length() == 0) {
        return 0;
    }

    int[] heights = new int[matrix[0].length()];
    int max = 0;
    for (int i = 0;i<matrix.length;i++) {
        for (int j = 0;j<matrix[i].length();j++) {
            heights[j] = matrix[i].charAt(j) == '1' ? heights[j] + 1 : 0; 
            
        }
        max = Math.max(max,largestRectangleArea(heights));
    }
    
    return max;
}

public int largestRectangleArea(int[] heights) {
    Stack<Integer> stack = new Stack<>();
    stack.push(-1);
    int maxArea = 0;
    for (int i = 0;i< heights.length;i++) {
        while (stack.peek() != -1 && heights[i] < heights[stack.peek()]) {
            int height = heights[stack.peek()];
            stack.pop();
            int width = i - stack.peek() - 1;
            maxArea = Math.max(maxArea, height * width);
        }
        stack.push(i);
    }

    while (stack.peek() != -1) {
        int height = heights[stack.peek()];
        stack.pop();
        int width = heights.length - stack.peek() - 1;
        maxArea = Math.max(maxArea, height * width);
    }

    return maxArea;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39383767/article/details/127939462

[转]信息安全相关理论题(四)_herry_lee的博客-爱代码爱编程_沙箱是通过哪种方式检测入侵

26、____表示邮件服务器返回代码为临时性失败(xx代表任意数)。 A、 2xx B、 3xx C、 4xx D、 5xx 您的答案: 标准答案: C 27、买家称购买商品异常后的正确操作是立即咨询官方客服。

[剑指offer] java版题解(完整版)更新中。。。_weixin_34061482的博客-爱代码爱编程

序号题解牛客 OJ数据结构类型03[剑指offer] 二维数组中的查找二维数组中的查找数组04[剑指offer] 替换空格替换空格字符串05[剑指offer] 从尾到头打印链表从尾到头打印链表链表06[剑指offer] 重建二叉树重建二叉树树07[剑指offer] 用两个栈实现队列用两个栈实现队列栈、队列08[剑指offer] 旋转数组的最小数字旋转数

[剑指-Offer] 10- I. 斐波那契数列及II. 青蛙跳台阶问题(递归、fib快速计算、fib求和公式、fib通项公式)-爱代码爱编程

文章目录 1. 题目来源2. 题目说明3. 题目解析3.1 方法一:自下而上、循环求解3.2 青蛙跳台阶、经典递归3.3 fib数列 O (

[剑指-Offer] 12. 矩阵中的路径(回溯、DFS、递归、代码优化)-爱代码爱编程

文章目录 1. 题目来源2. 题目说明3. 题目解析方法一:DFS、回溯、bool矩阵、经典仿照原书方法二:DFS、回溯、修改原数组 1. 题目来源 链接:矩阵中的路径 来源:LeetCode——《剑指-Offer》专项 2. 题目说明 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格

[剑指-Offer] 13. 机器人的运动范围(回溯、DFS、递归、代码优化)-爱代码爱编程

文章目录 1. 题目来源2. 题目说明3. 题目解析方法一:DFS、回溯、bool矩阵方法二:DFS、回溯、代码优化方法三:DFS性质、回溯、递归、代码优化 1. 题目来源 链接:机器人的运动范围 来源:LeetCode——《剑指-Offer》专项 2. 题目说明 地上有一个 m 行 n 列的方格,从坐标 [0,0] 到坐标 [m-1,n

[剑指-Offer] 29. 顺时针打印矩阵(边界情况、代码优化、多方法)-爱代码爱编程

文章目录 1. 题目来源2. 题目说明3. 题目解析方法一:边界情况+循环结束判断+常规解法方法二:下标转化法方法三:迷宫遍历法 1. 题目来源 链接:顺时针打印矩阵 来源:LeetCode——《剑指-Offer》专项 2. 题目说明 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix

C++ 学习路线:快速入门到进阶-爱代码爱编程

C/C++ 是一门底层、细粒度、功能强大、学习曲线陡峭的语言,虽然在Python等新语言的冲击下略显龙钟老态,但随着AIoT设备的兴起,以及C++社区不断推出新的版本,这门语言又重新焕发了生机。 本文把C++学习划分为入门、熟练、进阶三个阶段,每步提供相应的学习方法和资源,并归纳了每部分需要掌握的知识点供大家复习自检,希望能够帮助大家更好地掌握这门语言。

【剑指Offer】全部题目 —— 通俗易懂的参考答案与解析(Python)-爱代码爱编程

题目1:二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思想: 暴力解决 class Solution: # array 二维列表 def Find(self, target

最全算法学习资料汇总(附链接:书籍/网站/课程/面试/项目....),99%的人都收藏了!!-爱代码爱编程

算法是计算机科学领域最重要的基石之一,算法工程师也是数据科学领域最重要的岗位之一。因此,今天小会整理出一些算法相关学习资源,包括书籍、算法刷题网站、项目资源、视频课程、面试要领这5个方面,欢迎大家收藏并转发哦。 争取做到,看完这一篇,算法相关学习资料全掌握!话不多说,这就开始吧! 一:书籍推荐 【入门阶段】 1、啊哈!算法(豆瓣评分7.7) 这是一本

leetcode—<动态规划专项>剑指 offer 19、49、60_ostrich5yw的博客-爱代码爱编程

剑指 Offer 19. 正则表达式匹配、49. 丑数、60. n个骰子的点数 题目描述:[19] 请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa

【leetcode】剑指 offer(专项突击版)汇总_friedrichor的博客-爱代码爱编程

文章目录 002. 二进制加法(反转相加 / 位运算)006. 排序数组中两个数字之和(二分查找 / 双指针)007. 数组中和为 0 的三个数(双指针)008. 和大于等于 target 的最短子数组(滑动窗口 /

leetcode刷题——数组_数组 找 数 leetcode-爱代码爱编程

一、二分查找 1.leetcode704(简单) 题目链接:https://leetcode-cn.com/problems/binary-search/ 解题思路:题目已知条件是有序,所以考虑二分查找。 class Solution { public int search(int[] nums, int target) {

兜兜的乐扣刷题算法小记(不停更)_乐扣算法-爱代码爱编程

        根据题目,分析数据,找到规律!!!!!!!!题目数量很多,要想基本都会,就必须多练多见。量变导致质变。         “画图”帮助理解 Recursive Tree。                 程序员江湖有个传言:懂了《算法导论》的90%,就超越了90%的程序员。         全局变量在部分题目中,有很大的用处。能直

【南卡樱桃|读书笔记《学习高手》】-爱代码爱编程

∝总览学校提高成绩 ▲涵盖记忆、笔记、预习、复习、做作业、错题、偏科、请教老师等学习场景,提高以应试升学为导向的各项学习能力。 ▲终身学习 9大课、33小课 ▷涵盖逻辑思考力、速读、精读、写作、减压、注意力、熬夜、自学、