就爱瞎逛 2019-09-08 18:07 采纳率: 83.3%
浏览 376
已采纳

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 2019-09-08 23:05
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 python结合Matlab仿真忆阻器
  • ¥35 有人会注册whatsaop协议号吗?
  • ¥15 lead dbs 无法导入影像数据
  • ¥15 多目标MPA算法优化编程实现
  • ¥15 反激PWM控制芯片调研
  • ¥15 Python for loop减少运行时间
  • ¥15 fluent模拟物质浓度udf
  • ¥15 Collection contains no element matching the predicate
  • ¥20 冻品电商平台的搜索是怎么实现的
  • ¥15 如何搞一个可以控制、显示马达频率