【LeetCode】每日一题 2023_12_12 下一个更大元素 IV(堆,优先级队列/单调栈)

文章目录

  • 刷题前唠嗑
  • 题目:下一个更大元素 IV
    • 题目描述
    • 代码与解题思路

刷题前唠嗑


LeetCode?启动!!!

时隔两天,LeetCode 每日一题重新开张,流感已经不能阻挡我的脚步了!

题目:下一个更大元素 IV

题目链接:2454. 下一个更大元素 IV

题目描述

代码与解题思路

题目非常的好理解啊,这个读题难度让人感受不到他是一个 hard,而且这道题目一眼顶真,暴力解法非常的简单,直接一个一个数枚举就行了,但是一个一个数枚举肯定是会超时的,题目给的数据是 10 的 5 次,也就是说怎么说都得 N*logN 的复杂度,N 方肯定是超时的

这种根据大小找数字的题目,不难想到可以用优先级队列来维护,用题目给的样例分析一下,我们可以设计这样一个思路

  1. 遍历 nums 数组,每次遍历都入栈
  2. 如果出现当前遍历的数比栈顶大的情况,就让栈顶入优先级队列,直到所有比当前数小的栈顶都进优先级队列,因为当前的数就是刚刚入队的数的第一个大的数(题目要求的是第二个大的数)
  3. 当新的遍历的大于优先级队列中的数时,这个数就是所谓的第二个大的数,知道把所有符合情况的数都出队,修改 ans 数组

这样我们就是利用了优先级队列的特性,维护了一个小堆

func secondGreaterElement(nums []int) []int {
    ans := make([]int, len(nums))
    for i, _ := range nums { // 初始化成 -1
        ans[i] = -1
    }
    st1, st2 := []int{}, []int{}
    for i, v := range nums {
        for len(st2) > 0 && nums[st2[len(st2)-1]] < v { // 这次遍历的值比 st2 栈顶大
            ans[st2[len(st2)-1]] = v
            st2 = st2[:len(st2)-1]
        }
        j := len(st1)-1
        for j >= 0 && nums[st1[j]] < v { // 找到 v 的第一大整数
            j--
        }
        st2 = append(st2, st1[j+1:]...) // 将 v 的第一大整数及其之前的区间直接从栈 1 移入栈 2
        st1 = append(st1[:j+1], i) // 每次将当前位置的下标入栈 1
    }
    return ans
}

我们发现,这里的栈其实是一个单调的递减栈,我们可以利用他的特性,通过整体追加的形式模拟优先级队列,这样我们就能通过用两个单调栈 O(N) 一次遍历就能得出答案

代码的核心思路其实就是对题目要求的寻找第二个大的数的模拟。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

乐小鱼大理之行

在一个晴朗的日子里&#xff0c;乐小鱼和她的家人一起踏上了一场梦幻般的大理之行。他们驱车穿越沧山&#xff0c;眼前豁然开朗&#xff0c;洱海在阳光下泛着碧绿的光芒。 乐小鱼好奇地探出头&#xff0c;看到了连绵的山脉和湛蓝的湖水。她兴奋地说&#xff1a;“哇&#xff0…

【C++】类与对象(下)

本文目录 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5. 匿名对象6. 拷贝对象时的一些编译器优化7. 再次理解类和对象 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&am…

C++中的reverse函数

1.实现反转数组。 //头文件 #include <algorithm> //使用方法 reverse(a, an);//n为数组中的元素个数 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int main() {int a[100];int n,k;cin >> n >> k; …

QT 入门

目录 QT 概述 QT5安装 QT环境介绍 编写第一个QT的程序 QT项目文件介绍 QT 概述 QT简介 QT是一个跨平台的C图形用户界面应用程序框架。它为程序开发者提供图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正地组件编程。 QT的发…

欣赏动态之美,不如欣赏C语言实现动态内存管理之美 ! ! !

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 &#xff01;&#xff0…

【WinRAR】为什么右键没有压缩选项?

我们安装了WinRAR之后想要压缩文件&#xff0c;但是右键点击文件之后发现并没有WinRAR压缩选项&#xff0c;这应该如何设置才能出现右键带有压缩选项呢&#xff1f;方法如下&#xff1a; 首先打开WinRAR&#xff0c;在上面功能中点击选项 – 设置 然后我们在设置界面中切换到集…

数据结构:栈(Stack)的各种操作(入栈,出栈,判断栈非空,判断栈已满,附源码)

前言&#xff1a;在前面的文章中&#xff0c;我们讲解了顺序表&#xff0c;单链表&#xff0c;双向链表。而我们今天要分享的栈则是基于之前的数据结构上搭建的&#xff0c;但是相较于顺序表和链表来说&#xff0c;栈的实现就非常简单了。 目录 一.栈(Stack)的概念 二.栈的数…

html创建电子邮件链接

refer: 可以在a标签里使用&#xff1a; <a href"mailto:nameemail.com">Email</a>

大模型元年压轴盛会定档12月28日,第十届WAVE SUMMIT即将启航

回望2023年&#xff0c;大语言模型或许将是科技史上最浓墨重彩的一笔。从技术、产业到生态&#xff0c;大语言模型在突飞猛进中加速重构万物。随着理解、生成、逻辑、记忆四大能力显著提升&#xff0c;大语言模型为通用人工智能带来曙光。 AI开发者们正在用算法和代码书写一个…

ABB直流调速器维修DCS550 DCS400 DCS402.0200

德国ABB维修包括&#xff1a;直流调速器维修&#xff0c;伺服驱动器维修&#xff0c;变频器维修&#xff0c;伺服放大器维修&#xff0c;工控机维修&#xff0c;触摸屏维修 ABB直流调速器故障分析: 1、脱扣电流变压器过热引起的直流电机。 发现问题的根源在夏季常见或室内条…

聊天记录年度报告一览无余:轻松多格式导出永久保存,深度智能分析

聊天记录年度报告一览无余&#xff1a;轻松多格式导出永久保存&#xff0c;深度智能分析 1.功能简介效果展示 一个用于提取微信聊天记录的工具&#xff0c;支持将聊天记录导出成HTML、Word、CSV文档&#xff0c;以实现永久保存。此外&#xff0c;该工具还具有对聊天记录进行分…

Java 三元运算符

条件为真执行表达式1&#xff0c;条件为假执行表达式2&#xff0c;有点像if else语句&#xff0c;三目运算符的目的就是简化if else的编写形式。 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>首页</title> <…

AG16K MCU ARM Cortex M3

AGM AG16K MCU 器件是 FPGAMCU 的 SoC 单芯片产品。 FPGA 单元具有 16K LEs 的逻辑资源&#xff0c;MCU 为硬核 ARM Cortex M3。 MCU 特性  内核 ARM32 位的 Cortex M3 CPU 最高 200 Mhz 工作频率单周期乘法和硬件除法集成的嵌套式的中断控制器&#xff08;NVIC&#xff09…

Jenkins 添加node节点

安装SSH插件 Jenkins- 插件管理- 可选插件- 搜索SSH Agent 配置启用SSH Server Jenkins- 系统管理 - 全局安全配置&#xff0c; 把 SSH Server 设置为启用(默认是禁用) 新增节点 第一种方式&#xff08;SSH密钥连接&#xff09;&#xff1a; 1.Jenkins主机生成SSH密钥 [rootk…

mysql——数据库基础

目录 一.什么是数据库 二.主流的数据库 三.服务器&#xff0c;数据库&#xff0c;表关系 四.数据逻辑存储 五.MySQL架构 六.SQL语句分类 七.存储引擎 一.什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1…

Nacos热更新(动态获取配置)

写在前面&#xff1a;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01;如果我的博客对你有帮助&#xff0c;欢迎进行评论✏️✏️、点赞&#x1f44d;&#x1f44d;、收藏⭐️⭐️&#…

[渗透测试学习] CozyHosting - HackTheBox

文章目录 信息搜集 nmap扫描一下&#xff0c;发现存在80端口和22端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.230直接访问80端口发现有跳转 那么我们将ip添加到hosts里面&#xff0c;成功访问 观察发现是企业网站&#xff0c;扫描一下没有子域名 那么就扫下目录&am…

【大模型】800万纯AI战士年末大集结,硬核干货与音乐美食12月28日准时开炫

文章目录 WAVE SUMMIT五载十届&#xff0c;AI开发者热血正当时酷炫前沿、星河共聚&#xff01;大模型技术生态发展正当时 回望2023年&#xff0c;大语言模型或许将是科技史上最浓墨重彩的一笔。从技术、产业到生态&#xff0c;大语言模型在突飞猛进中加速重构万物。随着理解、生…

若依源码分析

一.登录 1.1 生成验证码 基本思路 后端生成一个表达式,74?11 74?转成图片,传到前端进行展示 将结果11存入redis 前端代码实现: 请求后端地址:http://localhost/dev-api/captchaImage,通过反向代理解决前后端跨域问题,将请求路径变为:http://localhost:8080/captchaImag…

038.Python面向对象_三大特性综合案例1

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…
最新文章