美文网首页
下一个更大元素I496

下一个更大元素I496

作者: 名字是乱打的 | 来源:发表于2025-08-27 16:27 被阅读0次

一 题目:

二 思路:

这题其实算法要求进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗? 这里有个提示。
也就说算法要求两个数组都便利一次就解决问题。
那么显然我们可以用单调栈先遍历nums2把每一个元素右侧第一个比自己大的数都记录下来,再遍历num1,这样就找到目标数组了。
那么这里的单调栈是什么概念呢?你可以理解为每一个还没找到比自己大的元素都放进来。那么每一个数其实都是单调递减的了。

三 代码:

public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        int[] res=new int[nums1.length];

        Stack<Integer> indexStack=new Stack<>();
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums2.length; i++) {
            while (!indexStack.isEmpty()&&nums2[i]>nums2[indexStack.peek()]){
                map.put(nums2[indexStack.peek()],nums2[i]);
            }
            indexStack.push(i);
        }

        for (int i = 0; i < nums1.length; i++) {
            res[i]= map.getOrDefault(nums1[i], -1);
        }
        return res;
    }

相关文章

网友评论

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

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