当前位置: 首页 > news >正文

Leetcode 2454. 下一个更大元素 IV

  • Leetcode 2454. 下一个更大元素 IV
  • 题目
    • 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数,你必须找到对应元素的 第二大 整数。
    • 如果 nums[j] 满足以下条件,那么我们称它为 nums[i] 的 第二大 整数:
      • j >
      • nums[j] > nums[i]
      • 恰好存在 一个 k 满足 i < k < j 且 nums[k] > nums[i] 。
      • 如果不存在 nums[j] ,那么第二大整数为 -1 。
      • 比方说,数组 [1, 2, 4, 3] 中,1 的第二大整数是 4 ,2 的第二大整数是 3 ,3 和 4 的第二大整数是 -1 。
    • 请你返回一个整数数组 answer ,其中 answer[i]是 nums[i] 的第二大整数。
    • 1 <= nums.length <= 10 ^ 5
    • 0 <= nums[i] <= 10 ^ 9
  • 解法
    • 反向思考 + 两次单调队列 + 排序二分/TreeSet:
    • 第 1 步:
    • 题目可以转化为两步处理,
    • 通过下标 i 先找到 i 右边第一个 nums[k] > nums[i] 的 k,
    • 再存储 i 和 k 在找到 k 右边第一个 nums[j] > nums[i] 的 nums[j]
    • 第 2 步:
    • 找 k 可以使用倒序遍历,
    • 然后使用一个严格递减的单调栈,
    • 每次第一个大于 nums[i] 的 nums 下标即为 k,
      • 因为当求 i-1 时,要么 k 就是之前放入的 i(nums[i-1] < nums[i]),要么就是栈里剩下的某个元素(nums[i-1] >= nums[i])
    • 将所有 i 与 k 均存起来,
    • 第 3 步:
    • 由于求 i-1 时,此时的 k1 可能比求 i 时的 k2 更靠右,此时 j1 就应该在 [0,k1) 对应的单调栈中,
    • 在线求特别麻烦,因此可以考虑离线(即将所有 i-k 存起来,排序后统一处理)
    • 第 4 步:
    • 对 k 降序排,然后再次倒序使用一个严格递减的单调栈,
    • 当遍历的值等于某个 k 时,使用 二分/TreeSet 栈中大于 nums[i] 的最小值,即为结果
    • 遍历单调栈与 k 使用类似双指针的方式处理
    • 第 5 步:
    • 时间复杂度:O(n*logn)排序,空间复杂度:O(n)
  • 代码
/*** 反向思考 + 两次单调队列 + 排序二分/TreeSet:** 第 1 步:* 题目可以转化为两步处理,* 通过下标 i 先找到 i 右边第一个 nums[k] > nums[i] 的 k,* 再存储 i 和 k 在找到 k 右边第一个 nums[j] > nums[i] 的 nums[j]** 第 2 步:* 找 k 可以使用倒序遍历,* 然后使用一个严格递减的单调栈,* 每次第一个大于 nums[i] 的 nums 下标即为 k,*     * 因为当求 i-1 时,要么 k 就是之前放入的 i(nums[i-1] < nums[i]),要么就是栈里剩下的某个元素(nums[i-1] >= nums[i])* 将所有 i 与 k 均存起来,** 第 3 步:* 由于求 i-1 时,此时的 k1 可能比求 i 时的 k2 更靠右,此时 j1 就应该在 [0,k1) 对应的单调栈中,* 在线求特别麻烦,因此可以考虑离线(即将所有 i-k 存起来,排序后统一处理)** 第 4 步:* 对 k 降序排,然后再次倒序使用一个严格递减的单调栈,* 当遍历的值等于某个 k 时,使用 二分/TreeSet 栈中大于 nums[i] 的最小值,即为结果* 遍历单调栈与 k 使用类似双指针的方式处理** 第 5 步:* 时间复杂度:O(n*logn)排序,空间复杂度:O(n)**/public int[] secondGreaterElement(int[] nums) {int n = nums.length;// 所有 i 与 k 均存起来,k 不存在则使用 -1List<Pair<Integer, Integer>> indexList = new ArrayList<>();int[] res = new int[n];// 找 k 可以使用倒序遍历,然后使用一个严格递减的单调栈,Deque<Integer> decreaseStack = new LinkedList<>();for (int i = n - 1; i >= 0; i--) {while (!decreaseStack.isEmpty() && nums[decreaseStack.peekFirst()] <= nums[i]) {decreaseStack.pop();}indexList.add(new Pair<>(i, decreaseStack.isEmpty() ? -1 : decreaseStack.peekFirst()));// k 等于 -1 则结果也为 -1res[i] = -1;decreaseStack.push(i);}// 对 k 降序排,然后再次倒序使用一个严格递减的单调栈Collections.sort(indexList, (o1, o2) -> o2.getValue() - o1.getValue());
//        System.out.println(indexList);// 当遍历的值等于某个 k 时,使用 二分/TreeSet 栈中大于 nums[i] 的最小值,即为结果TreeSet<Integer> treeSet = new TreeSet<>();decreaseStack.clear();int listIndex = 0;for (int i = n - 1; i >= 0 && listIndex < n; i--) {while (listIndex < n && i == indexList.get(listIndex).getValue()) {int numsIndex = indexList.get(listIndex).getKey();Integer resTemp = treeSet.higher(nums[numsIndex]);res[numsIndex] = resTemp == null ? -1 : resTemp;listIndex++;}while (!decreaseStack.isEmpty() && nums[decreaseStack.peekFirst()] <= nums[i]) {treeSet.remove(nums[decreaseStack.peekFirst()]);decreaseStack.pop();}treeSet.add(nums[i]);decreaseStack.push(i);}return res;}

相关文章:

Leetcode 2454. 下一个更大元素 IV

Leetcode 2454. 下一个更大元素 IV题目 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数&#xff0c;你必须找到对应元素的 第二大 整数。如果 nums[j] 满足以下条件&#xff0c;那么我们称它为 nums[i] 的 第二大 整数&#xff1a; j >nums[j] > nu…...

浏览器全屏按键同f11效果

模拟键f11 // for IE&#xff0c;这里和fullScreen相同&#xff0c;模拟按下F11键退出全屏 let wscript new ActiveXObject(WScript.Shell) if (wscript ! null) {wscript.SendKeys({F11}) }同f11键效果生效全屏函数 //判断是否是全屏状态 var isFull Math.abs(window.scree…...

CentOS 7.9 安装 k8s(详细教程)

&#x1f37f;安装步骤 &#x1f35a;安装前准备事项&#x1f35a;安装docker&#x1f35a;删除docker&#x1f35a;安装yum工具&#x1f35a;设置docker镜像源&#x1f35a;安装指定版本docker&#x1f35a;设置开启自启&#x1f35a;阿里云镜像加速 &#x1f35a;准备环境&am…...

区块链的可拓展性研究【05】闪电网络

1.闪电网络&#xff1a;闪电网络是一种基于比特币区块链的 Layer2 扩容方案&#xff0c;它通过建立一个双向支付通道网络&#xff0c;实现了快速、低成本的小额支付。闪电网络的交易速度非常快&#xff0c;可以达到每秒数万笔交易&#xff0c;而且交易费用非常低&#xff0c;几…...

如何部署Portainer容器管理工具+cpolar内网穿透实现公网访问管理界面

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 本文主要介绍如何本地安装Portainer并结合内网穿透工具实现任意浏览器远程访问管理界面。Portainer 是一个轻量级…...

Linux——Samba文件共享服务配置

SMB/CIFS协议 SMB协议(Server Message Block 又称Common Internet File System&#xff08;CIFS&#xff09;) 是由微软开发的网络传输协议&#xff0c;用来实现网络共享文件系统、打印机等资源。 SMB协议有多个版本和不同的兼容性。 SMBv1/CIFS: 也称为SMB1或CIFS。最初由Micr…...

自动驾驶右向辅助功能规范

目 录 Contents 目录 1. 介绍 Introduction. 8 1.1 此文档的范围和目的 Scope and Purpose of This Document 8 1.2 参考文档References. 9 1.3 文档的维护 Maintenance of the Document 10 1.4 缩略词Abbreviations. 10 1.5 文档概述Document Overview.. 11 1.6 功能…...

ASF-YOLO开源 | SSFF融合+TPE编码+CPAM注意力,精度提升!

目录 摘要 1 Introduction 2 Related work 2.1 Cell instance segmentation 2.2 Improved YOLO for instance segmentation 3 The proposed ASF-YOLO model 3.1 Overall architecture 3.2 Scale sequence feature fusion module 3.3 Triple feature encoding module …...

Mac 如何删除文件及文件夹?可以尝试使用终端进行删除

MacOS 是 Mac 电脑采用的操作系统&#xff0c;你知道 Mac 如何删除文件吗&#xff1f;除了直接将文件或者文件夹拖入废纸篓之外&#xff0c;我们还可以采用终端命令的办法去删除文件&#xff0c;本文为大家总结了 Mac 删除文件方法。 为何使用命令行删除文件 在使用 Mac 电脑…...

最新Redis7持久化(权威出版)

首先我们要知道什么是持久化&#xff1a;持久化是指将数据保存到磁盘上&#xff0c;以确保在Redis服务器重启时数据不会丢失。 Redis支持两种主要的持久化方式&#xff1a;RDB持久化和AOF持久化 下面让我依次给你介绍一下&#xff1a; RDB持久化 作用 这是将Redis数据保存…...

Redis权限管理体系(一):客户端名及用户名

在Redis6之前的版本中&#xff0c;因安全认证的主要方式是使用Redis实例的密码进行基础控制&#xff0c;而无法按照不同的应用来源配置不同账号以及更细粒度的操作权限控制来管理。本文先从client list中的信息入手&#xff0c;逐步了解Redis的客户端名设置、用户设置及权限控制…...

【数据库设计和SQL基础语法】--查询数据--排序

一、排序数据 1.1 ORDER BY子句 单列排序 单列排序是通过使用 ORDER BY 子句对查询结果按照单个列进行排序。以下是单列排序的一些示例&#xff1a; 升序排序&#xff08;默认&#xff09;&#xff1a; SELECT column1, column2, ... FROM your_table_name ORDER BY column_t…...

【sqli靶场】第六关和第七关通关思路

目录 前言 一、sqli靶场第六关 1.1 判断注入类型 1.2 观察报错 1.3 使用extractvalue函数报错 1.4 爆出数据库中的表名 二、sqli靶场第七关 1.1 判断注入类型 1.2 判断数据表中的字段数 1.3 提示 1.4 构造poc爆库名 1.5 构造poc爆表名 1.6 构造poc爆字段名 1.7 构造poc获取账…...

c语言快速排序(霍尔法、挖坑法、双指针法)图文详解

快速排序介绍&#xff1a; 快速排序是一种非常常用的排序方法&#xff0c;它在1962由C. A. R. Hoare&#xff08;霍尔&#xff09;提的一种二叉树结构的交换排序方法&#xff0c;故因此它又被称为霍尔划分&#xff0c;它基于分治的思想&#xff0c;所以整体思路是递归进行的。 …...

【mysql】锁的类型有哪些呢?

0 回答 根据数据的访问级别来区分&#xff1a; mysql锁分为共享锁和排他锁&#xff0c;也叫做读锁和写锁。读锁是共享的&#xff0c;可以通过lock in share mode实现&#xff0c;这时候只能读不能写。写锁是排他的&#xff0c;它会阻塞其他的写锁和读锁。 从颗粒度来区分&am…...

uniapp 显示文件流图片

如果是需要将文件流保存到相册&#xff0c;可以先转base64.详情见>uniapp app将base64保存到相册,uniapp app将文件流保存到相册-CSDN博客 uni.request({url: "www.baidu.com",data: {},header: {content-type:application/json,Authorization: "token"…...

多线程------ThreadLocal详解

目录 1. 什么是 ThreadLocal&#xff1f; 2. 如何使用 ThreadLocal&#xff1f; 3. ThreadLocal 的作用 4. ThreadLocal 的应用场景 5. ThreadLocal 的注意事项 我的其他博客 ThreadLocal 是 Java 中一个很有用的类&#xff0c;它提供了线程局部变量的支持。线程局部变量…...

【C++】POCO学习总结(十六):随机数、密码、时间戳、日期和时间(格式化与解析)、时区、本地时间

【C】郭老二博文之&#xff1a;C目录 1、Poco::Random 随机数 1.1 说明 POCO包括一个伪随机数生成器(PRNG)&#xff0c;使用非线性加性反馈算法&#xff0c;具有256位状态信息和长达269的周期。 PRNG可以生成31位的伪随机数。 它可以生成UInt32, char, bool, float和double…...

打补丁,生成.diff文件

作者&#xff1a;爱塔居 文章目录 目录 前言 步骤 一、在根目录上&#xff0c;输入添加指令 二、输入修改内容指令 三、生成补丁 前言 自己的理解&#xff0c;仅供参考&#xff0c;欢迎指正。 补丁的话&#xff0c;在我看来就是方便评审&#xff0c;更方便看修改代码吧。 步骤…...

《LeetCode力扣练习》代码随想录——字符串(KMP算法学习补充——针对next数组构建的回退步骤进行解释)

《LeetCode力扣练习》代码随想录——字符串&#xff08;KMP算法学习补充——针对next数组构建的回退步骤进行解释&#xff09; 学习路径 代码随想录&#xff1a;28. 实现 strStr() CSDN&#xff1a;【详解】KMP算法——多图&#xff0c;多例子&#xff08;c语言&#xff09; …...

springboot-vue+nodejs的公考在线刷题学习平台的设计与实现

目录技术栈选择核心模块设计关键实现步骤扩展功能建议示例代码片段&#xff08;Spring Boot Controller&#xff09;注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术栈选择 后端框架&#xff1a;Spring Boot&#…...

Android Hook应用开发实战:从入门到精通LSPosed框架

Android Hook应用开发实战&#xff1a;从入门到精通LSPosed框架 【免费下载链接】LSPosed_mod My changes to LSPosed 项目地址: https://gitcode.com/GitHub_Trending/ls/LSPosed_mod 一、技术背景&#xff1a;为什么需要Android钩子技术 理解钩子技术的核心价值 钩子…...

深入ProtoBuf编译:从Google.Protobuf.dll到Protoc.exe的完整实践指南

1. ProtoBuf基础与编译环境搭建 Protocol Buffers&#xff08;简称ProtoBuf&#xff09;是Google开发的一种高效数据序列化工具。我第一次接触ProtoBuf是在处理微服务通信时&#xff0c;当时被它比JSON快3-5倍的序列化速度震惊了。简单来说&#xff0c;ProtoBuf就像是个智能的数…...

lingbot-depth-pretrain-vitl-14效果展示:多光照/反光表面深度补全自然边缘案例

lingbot-depth-pretrain-vitl-14效果展示&#xff1a;多光照/反光表面深度补全自然边缘案例 1. 引言&#xff1a;当深度图遇上“反光杀手” 你有没有遇到过这种情况&#xff1f;用深度相机扫描一个光滑的桌面&#xff0c;或者对着窗户拍一张照片&#xff0c;结果生成的深度图…...

能耗优化指南:OpenClaw+GLM-4.7-Flash笔记本续航方案

能耗优化指南&#xff1a;OpenClawGLM-4.7-Flash笔记本续航方案 1. 为什么需要关注OpenClaw的能耗问题 去年夏天的一次出差经历让我深刻意识到这个问题的重要性。当时我正在高铁上用笔记本调试一个OpenClaw自动化流程&#xff0c;结果不到两小时就收到了电量不足的警告。这促…...

一文讲清楚 OpenClaw 是什么,以及 Windows 下的部署

OpenClaw 到底是什么1. 它在系统里干的事&#xff1a;接入层 运行时管理很多人第一次看到 OpenClaw&#xff0c;会把它当成“一个聊天 UI”。更工程化的视角是&#xff1a;它负责把外部请求接进来&#xff0c;并把后面的执行系统跑起来、管起来。接入层&#xff1a;把外部入口…...

Lychee模型API网关配置:Kong中间件集成指南

Lychee模型API网关配置&#xff1a;Kong中间件集成指南 1. 引言 在AI服务部署过程中&#xff0c;如何有效管理和保护模型API是一个常见挑战。Lychee模型作为强大的多模态处理工具&#xff0c;在生产环境中需要可靠的流量控制和安全防护机制。这就是API网关发挥作用的地方。 …...

WarcraftHelper:魔兽争霸3兼容性问题的全方位解决方案

WarcraftHelper&#xff1a;魔兽争霸3兼容性问题的全方位解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 问题发现&#xff1a;现代系统下的经…...

3大维度破解C盘空间困局:Windows Cleaner让系统重获新生的开源方案

3大维度破解C盘空间困局&#xff1a;Windows Cleaner让系统重获新生的开源方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 当你的电脑频繁弹出"磁盘空间…...

DeepSeek-OCR-2功能测评:多语言支持、复杂背景识别,实测好用

DeepSeek-OCR-2功能测评&#xff1a;多语言支持、复杂背景识别&#xff0c;实测好用 1. 引言&#xff1a;OCR技术的新标杆 在数字化时代&#xff0c;文字识别技术已经成为连接物理世界与数字世界的重要桥梁。DeepSeek-OCR-2作为最新一代的开源OCR模型&#xff0c;凭借其创新的…...