weixin_40836227
就爱瞎逛
采纳率83.3%
2019-09-08 18:07

leetcode496下一个更大元素 I 想用javascript和单调栈怎么实现?

已采纳

问题来源:https://leetcode-cn.com/problems/next-greater-element-i/

想用javascript和单调栈,但是一直得不到正确结果,知道应该改的地方但是不知道要怎么改。难道本身就不能这么写吗?求大佬们指教

var nextGreaterElement = function(nums1, nums2) {
    let result = new Array(nums1.length).fill(-1),
        stack = [];

    for(let i = 0; i < nums1.length; i++){
        stack = [];
        let cur = nums1[i];
        let t = nums2.indexOf(cur);//这是对应nums2的下标
        for(; t < nums2.length; t++){
            while(stack.length && nums2[t] >= stack[stack.length-1]){
                stack.pop();
            }
            result[i] = stack.length? stack[stack.length-1] : -1;//应该是这里出了问题
            stack.push(nums2[t]);
        }

    }
    return result;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • JonathanYan JonathanYan 2年前

    出问题的那句话问题非常大,首先把应当赋值一次的语句放在循环体里就有很大隐患,其次这样写会导致找到比x更大的数后,第二大、第三大的数陆续有下一句添加进去,导致结果错误,自己推导推导。
    而且按你的逻辑没必要用stack,直接用一个变量吧最大的找出来就成,如果你只是为了练习那倒没啥。
    而且作为算法题不是会用stack就够了,这题有O(n)的解法,你这是O(n2),如果你知道我在说什么可以考虑修改一下。

    点赞 评论 复制链接分享