首页 > 其他分享 >1116打卡

1116打卡

时间:2023-11-16 10:58:37浏览次数:27  
标签:int len heights 1116 打卡 矩形 newHeights stack

1. 柱状图中最大的矩形(84)

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。

class Solution {
    public int largestRectangleArea(int[] heights) {
  int len = heights.length;
        if (len == 0) {
            return 0;
        }

        if (len == 1) {
            return heights[0];
        }

        int res = 0;

        int[] newHeights = new int[len + 2];
        newHeights[0] = 0;
        System.arraycopy(heights, 0, newHeights, 1, len);
        newHeights[len + 1] = 0;
        len += 2;
        heights = newHeights;

        Deque<Integer> stack = new ArrayDeque<>(len);
        // 先放入哨兵,在循环里就不用做非空判断
        stack.addLast(0);
        
        for (int i = 1; i < len; i++) {
            while (heights[i] < heights[stack.peekLast()]) {
                int curHeight = heights[stack.pollLast()];
                int curWidth = i - stack.peekLast() - 1;
                res = Math.max(res, curHeight * curWidth);
            }
            stack.addLast(i);
        }
        return res;


    }
}

2. 最大矩形(85)

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

思想:我们将 mat 的每一行作为基准,以基准线为起点,往上连续 <span class="katex"><span class="katex-mathml"><span class="katex-html"><span class="base"><span class="strut"><span class="mord">1&nbsp;的个数为高度。对于原矩中面积最大的矩形,其下边缘必然对应了某一条基准线,从而将问题转换为<a href="https://leetcode.cn/problems/largest-rectangle-in-histogram/solution/by-ac_oier-i470/" target="_blank">柱状图中最大的矩形</a>&nbsp;。

l[i] 代表位置 i 左边最近一个比其小的位置(初始值为 −1),r[i] 代表位置 i 右边最近一个比其小的位置(初始值为 n)

class Solution {
    public int maximalRectangle(char[][] matrix) {
  int n= matrix.length,m= matrix[0].length,ans=0;
    int[][]sum = new int[n+1][m+1];
        for (int i = 1; i <=n ; i++) {
            for (int j = 1; j <=m ; j++) {
                sum[i][j] = matrix[i-1][j-1]=='0'?0:sum[i-1][j]+1;
            }
        }
        int[] l = new int[m+1];
        int[] r = new int[m+1];
        for (int i = 1; i <=n ; i++) {
            int[] cur = sum[i];
            Arrays.fill(l,0);
            Arrays.fill(r,m+1);
            Deque<Integer> d =new ArrayDeque<>();
            for (int j = 1; j <=m ; j++) {
                while (!d.isEmpty()&&cur[d.peekLast()]>cur[j]){
                    r[d.pollLast()]=j;
                }
                 d.addLast(j);
            }
            d.clear();
            for (int j = m; j >=1 ; j--) {
                while (!d.isEmpty()&&cur[d.peekLast()]>cur[j]){
                    l[d.pollLast()]=j;
                   
                }
                 d.addLast(j);
            }
            for (int j = 1; j <=m ; j++) {
                ans=Math.max(ans,cur[j]*(r[j]-l[j]-1));
            }

        }
        return ans;
    }
}

 

标签:int,len,heights,1116,打卡,矩形,newHeights,stack
From: https://www.cnblogs.com/forever-fate/p/17835706.html

相关文章

  • 11月15每日打卡
    企业erp: index:<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content=&q......
  • 大二打卡(11.15)
    今天做了什么:今天周三,上午一节英语课,今天除了上次的听写成绩不太满意,其他的课上表现都感觉有了高中时候的热情,继续保持下午孟老师开会,随机点了个名就点到我了,我还去的晚了,虽然没迟到,但是真倒霉晚上把uml报告搞定了,得劲今天遇到什么问题:英语还得给劲,建民的测试练了一会儿,对于......
  • 20231114打卡
    今天学习了数据结构练习了最小生成树算法kruskal和最短路径dijkstra和floyd算法#defineMAX10000000#include<iostream>usingnamespacestd;structGraph{ int**arc; char*vex; intvexnum; intarcnum;};structEdge{ intstart,end,weight;};Edge*cre......
  • 11.14打卡
    1.最小覆盖字串(76)给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。classSolution{publicStringminWindow(Strings,Stringt){intn=s.length();......
  • 大二打卡(11.13)
    今天做了什么:今天周一,没有工程实训,没有早八,开心,一觉睡到九点12,刚醒墩儿,手机一震,建民老师发布消息,下午分级测试,以为上周说的每周一套题,就单单是个练习,没想到还是考试,难顶,但是上午的时候还是没怎么放在心上,下午开始测试了,才发觉这玩意工作量这么大,没好好练,根本写不完,才三个小时,我估......
  • 多商家签到打卡奖励免单霸王餐小程序开发
    多商家签到打卡奖励免单霸王餐小程序开发用户注册和登录:提供用户注册和登录功能,以便用户能够参与签到打卡活动。商家入驻:商家可申请入驻平台,提交相关资料并等待平台审核,审核通过后即可发布活动和奖励。签到打卡活动:用户可通过小程序参与商家举办的签到打卡活动,定期签到打卡可获得积......
  • 20231114打卡
    早上,我在课堂上学习了拓扑排序和关键路径两个在工程实践中非常重要的概念。拓扑排序是一种拓扑排序算法,用于高效地解决有向无环图(DAG)中的依赖问题。关键路径则可以帮助我们确定项目计划中的关键节点和关键路径,是工程项目管理中非常常用的技术。通过课堂讲解和案例分析,我对这两个概......
  • 代码随想训练营第三十五天打卡(Python)| 860.柠檬水找零、406.根据身高重建队列、452. 用
    860.柠檬水找零classSolution:deflemonadeChange(self,bills:List[int])->bool:five,ten,twenty=0,0,0forbillinbills:ifbill==5:five+=1elifbill==10:iffive......
  • 20231113打卡
    今天上午电工基础实训,掌握基本的用电常识,提高我的用电安全意识,锻炼我的实操能力。下午java分级测试,我花了大量时间在后端构建上,前端分配的时间相对少了很多,主要是自己的技能水平不够熟练,勉强B级qwq......
  • 11月13每日打卡
    实验13:享元模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解享元模式的动机,掌握该模式的结构;2、能够利用享元模式解决实际问题。 [实验任务一]:围棋设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。实......