下一个更大元素 I
题目描述
- 题目地址:https://leetcode.cn/problems/next-greater-element-i/
- 题目要求
nums1
中数字x
的 **下一个更大元素 **是指x
在nums2
中对应位置 右侧 的 **第一个 **比x
大的元素。
给你两个 没有重复元素的数组 nums1
和 nums2
,下标从 **0 **开始计数,其中nums1
是 nums2
的子集。
对于每个 0 <= i < nums1.length
,找出满足nums1[i] == nums2[j]
的下标 j
,并且在nums2
确定 nums2[j]
的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是-1
。
返回一个长度为 nums1.length
的数组ans
作为答案,满足 ans[i]
是如上所述的 下一个更大元素 。
解决方法一
解题思路
- 逐个计算nums1中的每个元素值nums [i] 在nums2中对应位置的右边的第一个比 nums1[i]大的元素值。具体地,我们使用如下方法:
- 初始化与nums 1等长的查询数组res
- 遍历nums1中的所有元素,设当前遍历到元素为nums1[i]:
- 从前向后遍历nums2中的元素,直到找到nums2[j] = nums1[i];
- 从j+1开始继续向后遍历,直到找到nums2[k] = nums2[j],其中k>=j+1;
- 如果找到了nums2[k],则将res[i]置为nums2[k],否则将res[i]置为-1.
- 查询数组res即为最终结果。
解题代码
var nextGreaterElement = function(nums1, nums2) {
const m = nums1.length, n = nums2.length;
const res = new Array(m).fill(0);
for (let i = 0; i < m; ++i) {
let j = 0;
while (j < n && nums2[j] !== nums1[i]) {
++j;
}
let k = j + 1;
while (k < n && nums2[k] < nums2[j]) {
++k;
}
res[i] = k < n ? nums2[k] : -1;
}
return res;
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端