欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 算法11(力扣496)-下一个更大元素I

算法11(力扣496)-下一个更大元素I

2025/4/21 0:55:05 来源:https://blog.csdn.net/2301_76648183/article/details/145337534  浏览:    关键词:算法11(力扣496)-下一个更大元素I

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]}}//  不符合的返回-1return -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]}}//  不符合的返回-1return -1}           }console.log(arr);return arr};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词