首页 > 其他分享 >day60

day60

时间:2023-03-15 10:55:15浏览次数:36  
标签:int len heights day60 new 矩形 dq

1、leetcode84 柱状图中的最大矩形

  1. 思路【宫水三叶题解】

    • 最终矩形的高度必然取自某个heights[i],因此我们可以枚举最终矩形的高度来做。
    • 问题转换为当使用某个heights[i]作为矩形高度时,该矩形所能取得的最大宽度为多少。
    • 假设我们能够预处理出 lr 数组
      • l[i]代表位置 i 左边最近一个比其小的位置(初始值为 −1)
      • r[i]代表位置 i 右边最近一个比其小的位置(初始值为 n)
      • r[i] - l[i] - 1 则是以 heights[i] 作为矩形高度时所能取得的最大宽度。
    • 预处理 lr 数组则是经典的「求最近一个比当前值大的位置」单调栈问题。
  2. 代码

    class Solution {
        public int largestRectangleArea(int[] heights) {
            int len = heights.length;
            int res = 0;
            int[] l = new int[len];
            int[] r = new int[len];
            Arrays.fill(l,-1);
            Arrays.fill(r,len);
            Deque<Integer> dq = new ArrayDeque<>();
    
            for(int i=len-1; i>=0; i--) {
                while(!dq.isEmpty() && heights[dq.peekLast()]>heights[i] ) {
                    l[dq.pollLast()] = i;
                }
                dq.offerLast(i);
            }
    
            dq.clear();
    
            for(int i=0; i<len; i++) {
                while(!dq.isEmpty() && heights[dq.peekLast()]>heights[i] ) {
                    r[dq.pollLast()] = i;
                }
                dq.offerLast(i);
            }
    
    
            for(int i=0; i<len; i++) {
                res = Math.max(res, heights[i]*(r[i]-l[i]-1));
            }
    
            return res;
        }
    }
    
    

标签:int,len,heights,day60,new,矩形,dq
From: https://www.cnblogs.com/hzj-bolg/p/17217699.html

相关文章

  • 【算法训练营day60】LeetCode84. 柱状图中的最大的矩形
    LeetCode84.柱状图中的最大的矩形题目链接:84.柱状图中的最大的矩形独上高楼,望尽天涯路感觉和接雨水很像。慕然回首,灯火阑珊处思路如下。我们可以遍历每根柱子,以当......
  • day60-watch与计算属性的对比与监视属性的简写
    监视属性与计算属性对比监视属性简写 watch:{//正常写法/*isHot:{handler(newvalue,oldvalue){//当isHot改变的时候调用......
  • 前端Vue2-Day60
    Vue路由:vue-router(实现SPA应用) SPA应用:①单页web应用。②整个应用只有一个完整的页面。③点击页面中的导航链接不会刷新页面,只会做页面的局部更新。④数据需要......
  • python学习Day60
    Day60今日内容概要表查询数据准备及测试环境搭建ORM常见表查询关键字双下划线查询查看ORM底层SQL遇见ORM外键字段创建外键字段数据增删改查正反向概念基于对象......