1、问题
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]
是如上所述的 下一个更大元素 。
2、示例
(1)
输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:
- 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
- 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。下一个更大元素是 3 。
- 2 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
(2)
输入:nums1 = [2,4], nums2 = [1,2,3,4].
输出:[3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:
- 2 ,用加粗斜体标识,nums2 = [1,2,3,4]。下一个更大元素是 3 。
- 4 ,用加粗斜体标识,nums2 = [1,2,3,4]。不存在下一个更大元素,所以答案是 -1 。
3、实现思路
(1)理解题意
(2)实现思路
遍历nums1,通过findIndex找到nums1中各项在nums2中的索引位置,然后将当前值和索引给检验函数,在函数中通过循环遍历找到第一个比当前值大的数,返回;如果没有返回-1(本质是双重for循环)
4、具体步骤
(1)定义空数组,存储检验函数返回的值
(2)找nums1中元素在nums2中出现的索引位置和nums2中的当前值
(3)将值传给检查函数
1)在函数中,通过循环和判断找到较大者,找不到,返回-1
(4)调用函数,将值存入数组
(5)返回数组
5、完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>下一个更大元素I</title>
</head>
<body>
<p>
<p>
nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个比 x 大的元素。
</p>
<p>
给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0开始计数,其中nums1 是 nums2 的子集。
</p>
<p>
对于每个 0 <= i < nums1.length
,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的
下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。
</p>
<p>
返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的下一个更大元素 。
</p>
</p>
<p>
<p>
输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:
- 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
- 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。下一个更大元素是 3 。
- 2 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
</p>
<p>
输入:nums1 = [2,4], nums2 = [1,2,3,4].
输出:[3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:
- 2 ,用加粗斜体标识,nums2 = [1,2,3,4]。下一个更大元素是 3 。
- 4 ,用加粗斜体标识,nums2 = [1,2,3,4]。不存在下一个更大元素,所以答案是 -1 。
</p>
</p>
<script>
let nums1 = [4,1,2], nums2 = [1,3,4,2]
// let nums1 = [2,4], nums2 = [1,2,3,4]
// let nums1 = [1,3,5,2,4],nums2 = [6,5,4,3,2,1,7]
nextGreaterElement(nums1,nums2)
function nextGreaterElement(nums1, nums2) {
let arr = []
for (let i = 0; i < nums1.length; i++) {
// 找nums1中元素在nums2中出现的索引位置
let index = nums2.findIndex(item => item===nums1[i])
// console.log(index);
// 当前值
let cur = nums2[index]
// 比较后获取的结果
let res = checkIt(index,cur)
// 将结果存入数组
arr.push(res)
function checkIt(index,cur) {
for (let j = index+1; j < nums2.length; j++) {
//将结果中较大者返回(只获取第一个比当前值大的值)
if (cur<nums2[j]) {
return nums2[j]
}
}
// 不符合的返回-1
return -1
}
}
console.log(arr);
return arr
}
</script>
</body>
</html>
6、力扣通过代码
var nextGreaterElement = function(nums1, nums2) {
let arr = []
for (let i = 0; i < nums1.length; i++) {
// 找nums1中元素在nums2中出现的索引位置
let index = nums2.findIndex(item => item===nums1[i])
// console.log(index);
// 当前值
let cur = nums2[index]
// 比较后获取的结果
let res = checkIt(index,cur)
// 将结果存入数组
arr.push(res)
function checkIt(index,cur) {
for (let j = index+1; j < nums2.length; j++) {
//将结果中较大者返回
if (cur<nums2[j]) {
return nums2[j]
}
}
// 不符合的返回-1
return -1
}
}
console.log(arr);
return arr
};