496. Next Greater Element I

原题链接

这个题做起来相对有意思一些。这是一个用于找规律的题。

题目大意是,给两个数组nums1和nums2,其中nums1的元素均是nums2里面的子元素,问nums1中元素右边最大的元素是谁,如果没有则返回-1。

这个题的思路就是:

  1. 把nums2拆分为若干递减再递增的列表。然后依次push到HashMap中。
  2. 遍历nums1,获取HashMap中的value值

例:
假定num2中的元素为[1,3,4,2] ->就可以拆分为 [1, 3, 4]、[4]、[2]这样的三个子序列。
对应塞入的HashMap里面的内容就为
(1, 4), (3, 4), (4, -1), (2, -1)。 (注:实现的时候有所区别)

假定num1中的元素为[4,1,2],根据key值获取对应的value。对应的就是[-1, 4, -1]了。

/**
 * Created by Joe on 2017/12/18.
 * https://leetcode.com/problems/next-greater-element-i/description/
 */
public class P496 {
    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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值