下一个更大元素
使用单调栈解决这类问题
假设nums1是nums2的子集,且没有重复元素,使用两个工具,一个是辅助栈(倒序插入nums2),一个是哈希表,
解题思路: 将nums2中的每一个元素对应的右边第一个比他大的元素记录下来,然后将这个值与他右边的第一个大于它的值同时存入哈希表中,在之后遍历nums1的时候可以直接把想要的答案找出来。辅助栈的作用是,在确定一个元素右侧的第一个元素比这个元素大的时候,如果越靠近这个元素同时比后面的元素要大,那么肯定在确定右侧第一个大元素的时候,肯定就没有后面元素的事了,此时把后面的元素都弹出
例题:LeetCode-496
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int n = nums1.length;
int m = nums2.length;
Deque<Integer> d = new ArrayDeque<>();
Map<Integer, Integer> map = new HashMap<>();
for(int i = m - 1; i >= 0; i--){
int x = nums2[i];
while(!d.isEmpty() && d.peekLast() <= x) d.pollLast();
// pollLast 检索并删除此列表的最后一个元素
map.put(x, d.isEmpty() ? -1 : d.peekLast());
d.addLast(x);//此双端队列的末尾插入指定的元素
}
int[] ans = new int[n];
for(int i = 0;i < n;i++) ans[i] = map.get(nums1[i]);
return ans;
}
}
作者:Zhbeii
出处:https://www.cnblogs.com/zhbeii/p/15466160.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?