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

发布于:2025-02-10 ⋅ 阅读:(83) ⋅ 点赞:(0)

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

};


网站公告

今日签到

点亮在社区的每一天
去签到