面网易后台开发居然遇到了一个困难难度算法题

news2025/1/19 2:25:44

在提供面经的同学中,竟然有同学在面试网易后台研发的时候遇到了一道困难难度的算法题。

一般来说,大多数面试的算法题都是以中等难度为主,遇到困难难度的算法题也许是公司现在不缺人、也许是在选拔人才、当然也很可能是面试官其实并不想要你。

但是不要灰心,虽然在网易的面试中遇到了困难题,但是还有那么多公司呢,总能遇到愿意发 offer 的。

今天带来和这位同学的网易面经中最相似的能找到的算法题:

题目描述:

题号:84

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

图片

图片

解题思路:

思路一:单调栈

在这个问题中,可以利用单调栈来找到每个柱子左边和右边第一个比它矮的柱子的位置,从而计算出以当前柱子高度为矩形高度的最大矩形面积。

具体步骤如下:

  1. 初始化一个空栈,以及一个用于存储每个柱子最大矩形面积的数组(初始化为0)。

  2. 从左到右遍历每个柱子:

    • 如果栈为空或者当前柱子的高度大于栈顶柱子的高度,将当前柱子的索引压入栈中。

    • 否则,弹出栈顶元素,并计算以该柱子高度为矩形高度的最大矩形面积(宽度为当前柱子索引与栈顶柱子索引之间的距离)。更新该柱子的最大矩形面积,并将该面积与之前的最大面积进行比较,取较大值作为当前的最大面积。重复此步骤直到栈为空或者当前柱子的高度大于栈顶柱子的高度,然后将当前柱子的索引压入栈中。

  3. 遍历结束后,栈中可能还剩余一些柱子。对于这些柱子,我们按照上述步骤计算以该柱子高度为矩形高度的最大矩形面积,并更新最大面积。

  4. 返回最大面积。

时间复杂度:O(n) 

空间复杂度:O(n)

C++


// C++
class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        stack<int> stk;  
        int maxArea = 0;  
        heights.push_back(0); // 添加一个高度为0的柱子,以便将所有柱子弹出栈  
    
        for (int i = 0; i < heights.size(); ++i) {  
            // 弹出栈中所有高度大于当前柱子的柱子,并计算最大矩形面积  
            while (!stk.empty() && heights[i] < heights[stk.top()]) {  
                int h = heights[stk.top()];  
                stk.pop();  
                int w = i;  
                if (!stk.empty()) {  
                    w = i - stk.top() - 1;  
                }  
                int area = h * w;  
                maxArea = max(maxArea, area);  
            }  
            stk.push(i);  
        }  
    
        return maxArea;  
    }
};

go

// go
func largestRectangleArea(heights []int) int {
    stack := []int{}  
    maxArea := 0  
    heights = append(heights, 0) // 添加一个高度为0的柱子,以便将所有柱子弹出栈  
    
    for i := 0; i < len(heights); i++ {  
        // 弹出栈中所有高度大于当前柱子的柱子,并计算最大矩形面积  
        for len(stack) > 0 && heights[i] < heights[stack[len(stack)-1]] {  
            h := heights[stack[len(stack)-1]]  
            stack = stack[:len(stack)-1]  
            w := i  
            if len(stack) > 0 {  
                w = i - stack[len(stack)-1] - 1  
            }  
            area := h * w  
            if area > maxArea {  
                maxArea = area  
            }  
        }  
        stack = append(stack, i)  
    }  
    
    return maxArea  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

【WRF工具】服务器上安装convert_geotiff

【WRF工具】服务器上安装convert_geotiff convert_geotiff简介方法1&#xff1a;下载安装包后下载convert_geotiff依赖库安装库1&#xff1a;libtiff库2&#xff1a;sqlite库3&#xff1a;curl库4&#xff1a;projcmake更新&#xff08;可选&#xff09;库5&#xff1a;geotiff…

mysql--表的约束

目录 理解表的约束和操作 如何理解&#xff1f; 1、空属性null 2、默认值default 3、列描述comment 4、自动填充zorefill 5、主键primary key &#xff08;1&#xff09;创建表时指定可以 &#xff08;2&#xff09;创建表后指定key &#xff08;3&#xff09;删除主…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具&#xff0c;今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件&#xff0c;负责网格数据的导出。合并&#xff0c;拆封等一系列操作 (gitee.com) 下…

Avalonia开发实践(四)——关于Setter优先级的问题

首先看一段样例代码&#xff1a; <StackPanel Orientation"Horizontal" Spacing"50" HorizontalAlignment"Center"><StackPanel.Styles><Style Selector"Button.default"><Setter Property"Background&quo…

健身俱乐部预约报名系统

这个是我新开发搭建的健身俱乐部行业的预约报名系统。 首页 焦点图大图展示 右侧联系栏目 关于我们 底部版权信息 在线咨询 一键拨号 添加微信 转发分享 预约来校 专业资质 室内环境相册 教练名片列表 教练名片详情 关于我 联系我 分享给好友 课程介绍 保存到通讯录 行业新闻 …

Vue3概述

1. Vue3概述 1.1 Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece。 1.2 vite简介 vite是新一代前端构建工具&#xff0c;官网地址&#xff1a;Vite中文网。 1.3 Vue2和Vue3区别 Vue2的API设计是Options&#xff08;配置&…

模拟设计工程师必知必会:一文讲透PLL学习重点

在模拟设计中&#xff0c;相位锁定环&#xff08;PLL&#xff09;是一种极其重要的技术。它在频率合成、时钟恢复、数据同步等多个方面发挥着关键作用。作为一名模拟设计工程师&#xff0c;对PLL的深入理解和熟练应用是必不可少的。本文将通过移知公开课《模拟设计工程师必知必…

QD1-P32 CSS 边框属性(3)padding(元素的内边距)

本节学习&#xff1a;CSS padding属性&#xff08;元素的内边距&#xff09; 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p32 ‍ padding 属性的用途 ​​ ‍ 在CSS中&#xff0c;padding​ 属性用于设置元素内部的空间&#xff0c;即在元素内容和其边界&…

用html、css和js来实现冒泡排序

效果图如下 代码如下 <meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>冒泡排序动画</title><style>body {display: flex;flex-direction: column;justify-con…

【Redis】zset有序集合的常见命令

zset是一个有序集合&#xff0c;有着set的特点&#xff0c;还引入了排序。每个元素额外会有一个分数(score)&#xff0c;元素不可重复&#xff0c;但是分数可以重复。排序以分数为主&#xff0c;如果分数相同&#xff0c;则按元素字典序。 推荐启动服务器时使用该命令&#x…

并发编程-CompletableFuture

并发编程-CompletableFuture 本篇主要讲述 JDK1.8 里面 CompletableFuture 的原理与源码分析。这一篇暂且作为整个章节的最后一篇(若有时间继承增加关于并发编程的其他内容)。闲话少叙&#xff0c;进入正题。在深入了解 CompletableFuture 之前我们先要看一下 Future&Call…

给自己气笑了

正如你所见这是AC代码&#xff0c;我也一直坚信&#xff0c;我调了一个早上一直给我报语法错误 我今天一直在想这个问题&#xff0c;为什么会语法错误&#xff0c;我想了很多很多&#xff0c;军训的时候我一直在想这个事情。 因为我坚信我的逻辑是正确的&#xff0c;不调出来…

JFinalcms代码审计

JFinalCms是开源免费的JAVA企业网站开发建设管理系统&#xff0c;极速开发&#xff0c;动态添加字段&#xff0c;自定义标签&#xff0c;动态创建数据库表并crud数据&#xff0c;数据库备份、还原&#xff0c;动态添加站点(多站点功能)&#xff0c;一键生成模板代码。 环境布置…

管家婆-本地化-重装数据库导入数据库mdf——未来之窗数据恢复专家

一、进入数据库管理软件 二、数据附加 三、选择文件mdf 四、错误处理 关闭管家婆和数据库服务重启 五、确定文件 六、确认附加 七、替换管家婆账套 八、阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术…

boost函数对象

文章目录 bindref函数FunctionLambda 本章介绍的是函数对象&#xff0c;可能称为’高阶函数’更为适合。 它实际上是指那些可以被传入到其它函数或是从其它函数返回的一类函数。 在C中高阶函数是被实现为函数对象的&#xff0c;所以这个标题还是有意义的。 bind 和C中的 std::…

使用Jenkins部署项目

部署中的痛点 为什么要用Jenkins&#xff1f;我说下我以前开发的痛点&#xff0c;在一些中小型企业&#xff0c;每次开发一个项目完成后&#xff0c;需要打包部署&#xff0c;可能没有专门的运维人员&#xff0c;只能开发人员去把项目打成一个exe包&#xff0c;可能这个项目已…

淘宝图片搜索商品数据api接口对接详细的描述和解释

淘宝图片搜索商品数据接口是一项高级的API服务&#xff0c;它允许用户通过上传图片来搜索淘宝上的商品。这一功能依托于先进的图像识别技术&#xff0c;通过复杂的算法对上传的图片进行分析和处理&#xff0c;从而找到与图片相似的商品。以下是对该接口的详细描述和解释&#x…

Java避坑案例 - 忽略线程重用导致信息错乱

文章目录 Pre导读问题背景问题重现存在Bug的代码BUG现象 问题分析解决方案修正后的代码修正后的现象 ThreadLocal 的正确使用小结 Pre 并发编程-11线程安全策略之线程封闭 Spring JDBC-Spring事务管理之ThreadLocal基础知识 每日一博 - ThreadLocal VS InheritableThreadLoc…

忘记7-zip文件7-zip文件,还可以解压zip文件吗?

文件压缩与解压已成为我们日常处理数据和存储信息的常规操作。7-Zip&#xff0c;作为一款开源且功能强大的文件压缩工具&#xff0c;凭借其高压缩率、支持多种格式以及免费使用的特点&#xff0c;赢得了广大用户的青睐。然而&#xff0c;出于保护文件内容安全的考虑&#xff0c…