496. Next Greater Element I

本文介绍了一种使用栈和哈希映射的方法来解决寻找数组中每个元素下一个更大的元素的问题。对于给定的两个整数数组nums1和nums2,nums1是nums2的子集,目标是从nums2中找到nums1中每个元素之后大于它的第一个元素的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接

一、题目要求:

给出两个int数组nums1和nums2,nums1是nums2的子集, 从nums2中找到nums1中每个元素之后大于他的第一个元素位置。

二、解决方法

方法一:栈

思路分析:

1. findNums是nums的子集,所以可以将nums中的每一个元素都在nums中找到next greater element,加入到map中存放
2. 再遍历findNums中每个元素,从map中对照取出所需。

步骤:

1. for循环nums中每一个元素nums[i],如果栈中有元素且栈顶元素小于nums[i],那么该元素是栈顶的next greater element(否则的话栈顶元素早已出栈),出栈栈中所有小于nums[i]的元素,他们的next greater element都是nums[i],将其加入map
2.for循环findNums中每一个元素,从map中按需取出,若无输出-1

实现:

·    public int[] nextGreaterElement(int[] findNums, int[] nums) {
        Map<Integer, Integer> map = new HashMap<>(); // map from x to next greater element of x
        Stack<Integer> stack = new Stack<>();
        for (int num : nums) {
            while (!stack.isEmpty() && stack.peek() < num)
                map.put(stack.pop(), num);
            stack.push(num);
        }   
        for (int i = 0; i < findNums.length; i++)
            findNums[i] = map.getOrDefault(findNums[i], -1);
        return findNums;
    }

技巧:

1. 定义了一个HashMap,存储每个元素key对应的next  greater element(value)
2. map的函数:map.getOrDefault(key,default):在map中查找key对应的value,如果找不到该key那么输出指定的default值
3. 定义的stack中元素保持递减
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值