美文网首页工作生活
P496 下一个更大的元素

P496 下一个更大的元素

作者: Spring_java | 来源:发表于2019-07-01 23:22 被阅读0次

给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。

nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。

例子:

输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
-  对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。 
-  对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。 
-  对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。

思路:

  • 两个数组都是无序的,其中数组1 是数组2 的子集。那么可以先 遍历数组2 获取数组2中每一个元素,与比该元素大的元素的hash表,
  • 然后遍历整个数组1 .在hash表中获取,存在就返回,不存在,就返回-1

难点:

  • 使用栈,遍历数组2,第一个元素放进去,如果接下来的元素比第一个元素大,就直接放入Hash表中,其中大的元素作为value。小的元素作为key
  • 接下来遍历,如果第二个元素小,那么就继续放入,直到出现比栈顶元素大的数据,那么就栈顶元素出栈,栈顶元素作为key 要入栈元素作为value
  • 遍历数组2完毕,接下来,遍历数组1 ,从hash表中去取。存在,就返回value,不存在,就返回-1.

代码:

        Stack<Integer> stack = new Stack<Integer>();
        HashMap<Integer, Integer> hasMap = new HashMap<Integer, Integer>();
        
        int[] result = new int[nums1.length];
        //  遍历数组2.栈顶元素小于,就出栈,作为key,比它大的就作为value
        for(int num : nums2) {
            while(!stack.isEmpty() && stack.peek()<num){
                hasMap.put(stack.pop(), num);
            }
            stack.push(num);
        }
        
        for(int i = 0; i < nums1.length; i++) result[i] = hasMap.getOrDefault(nums1[i], -1);
            
        return result;


相关文章

  • P496 下一个更大的元素

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1...

  • 栈-N1019-链表中的下一个更大节点

    题目 概述:给定一个链表,要你求该链表每个元素的下一更大元素,如果不存在下一个更大元素则下一个更大元素为0 输入:...

  • 单调栈

    496. 下一个更大元素 I 503. 下一个更大元素 II[https://leetcode-cn.com/pr...

  • 下一个更大元素

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更...

  • 下一个更大元素 II(LeetCode 503)

    题目 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下...

  • 556. 下一个更大元素 III

    556. 下一个更大元素 III[https://leetcode.cn/problems/next-greate...

  • 单调栈

    leetcode 496 503 556 581 84 85 滑动窗口最大值 下一个更大的元素

  • 栈2

    继续刷栈!!! leetcode 496 下一个更大的元素I 维护一个栈,当下一个元素比栈顶大时,出栈直到栈顶大于...

  • 2021.3.6每日一题

    503. 下一个更大元素 II[https://leetcode-cn.com/problems/next-gre...

  • leetcode503 下一个更大元素 II golang

    503. 下一个更大元素 II[https://leetcode-cn.com/problems/next-gre...

网友评论

    本文标题:P496 下一个更大的元素

    本文链接:https://www.haomeiwen.com/subject/zjuocctx.html