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

算法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]
                        }
                     }
                    //  不符合的返回-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

};


http://www.kler.cn/a/527805.html

相关文章:

  • C语言--数据在内存中的存储
  • 基于互联网+智慧水务信息化整体解决方案
  • 计算机组成原理——数据运算与运算器(二)
  • 392.判断子序列
  • 基于Python的药物相互作用预测模型AI构建与优化(上.文字部分)
  • Day28(补)-【AI思考】-AI会不会考虑自己的需求?
  • MATLAB-Simulink并行仿真示例
  • 前端 Vue 性能提升策略
  • DeepLens是一个用于计算镜头设计的可微光线追踪器
  • Redis代金卷(优惠卷)秒杀案例-多应用版
  • JVM的GC详解
  • 六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)
  • Fiddler(一) - Fiddler简介_fiddler软件
  • Spring--Bean的生命周期和循环依赖
  • leetcode——将有序数组转化为二叉搜索树(java)
  • SFTP 使用方法
  • 【Blazor学习笔记】.NET Blazor学习笔记
  • 【算法-位运算】求数字的补数
  • 知识库管理在提升客户服务质量中的应用与挑战分析
  • 嵌入式八股文之深入理解 C语言中的指针相关概念
  • 04树 + 堆 + 优先队列 + 图(D1_树(D2_二叉树(BT)(D1_基础学习)))
  • 笔记:电机及控制器的功率测量是怎么进行的?
  • 服务器架构设计大全及其优缺点概述
  • 长尾关键词在SEO提升网站流量中的关键角色与应用技巧分析
  • AVL树介绍
  • Java设计模式:行为型模式→观察者模式