当前位置: 首页 > 知识库问答 >
问题:

对于LeetCode上的库存跨度问题,是否有更好的解决方案?

赵雅懿
2023-03-14

我在2020年5月19日做了Leetcode挑战,这是在线股票跨度。它的描述是这样的:

编写一个StockSpanner类,它收集某一股票的每日报价,并返回该股票当日价格的跨度。该股票今日价格的跨度定义为该股票价格小于或等于今日价格的最大连续天数(从今天开始向后)。

我使用了一种使用堆栈的方法,该堆栈保存大小为2的int数组,其中索引0存储价格,索引1存储该价格的跨度。我提交并通过了,但只击败了大约30%的Java提交。然而,在YouTube上找到的解决方案使用了与我相同的方法,使用了几种不同的语言,包括Java和Python。

链接到YouTube解决方案:https://www.YouTube.com/watch?v=lgwlbgwd-cw&t=64s

链接到leetcode:https://leetcode.com/explore/challenge/card/may-leetcoding-challenge/536/week-3-may-15th-may-21th/3334/

有人有更好的解决问题的办法吗?

下面是我的代码:

public class StockSpanner1 {
    Stack<int[]> prices;

    public StockSpanner1() {
        prices = new Stack<>();
    }

    public int next(int price) {
        int span = 1; // All inputs will start with span of 1

        // While the top price is less than the new price, sum the spans
        while (!prices.isEmpty() && prices.peek()[0] <= price) {
            span += prices.pop()[1]; // Sum the spans and pop the top
        }

        prices.push(new int[]{price, span}); // Add the new price with its span

        return span; // Return the span
    }
}

共有1个答案

胡泓
2023-03-14
    public class StockSpanner {
        Stack<Node> stack;
        int index;

        public StockSpanner()    //default constructor
        {
           this.stack=new Stack<>();
           this.index=0;
        }

        public int next(int price) {
            while(!stack.isEmpty() && stack.peek().val<=price){
                stack.pop();
            }
            int span=0;
            if(stack.isEmpty())  
                span = index+1;
            else 
                span = index-stack.peek().index+1;
            stack.push(new Node(price,++index));
            return span;
        }
    }

    class Node {
        int val;
        int index;

        public Node(int val,int index){
            this.val=val;
            this.index=index;
        }
    }

这里是我的解决方案,希望能有所帮助。

 类似资料:
  • 本文向大家介绍js关于getImageData跨域问题的解决方法,包括了js关于getImageData跨域问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 在学习h5的时候,canvas标签中getImageData()报错:security error! 具体代码如下(chrome浏览器): 报错信息如下:Uncaught SecurityError: Failed to execute

  • 本文向大家介绍基于vue-resource jsonp跨域问题的解决方法,包括了基于vue-resource jsonp跨域问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 最近在学习vue.js 碰到个ajax跨域请求的问题,之前知道可以用jsonp解决,但是一直没实践过,这次用发现里面好多问题,所以现在记录下来,希望可以给刚接触使用jsonp的同学一点帮助! 关于什么是jsonp,以及为

  • 我是一个非常新的学生。我有一个编码练习,我一直在努力完成,我认为我的解决方案是功能性的,但是我得到了意想不到的结果。我在想是不是我的逻辑有问题? 赋值:编写一个名为SumFirstAndLastDigit的方法,其中有一个类型为int的参数,称为number。 该方法需要使用循环找到传递给该方法的参数编号的第一位和最后一位,并返回该编号的第一位和最后一位的总和。 如果数字为负数,则方法需要返回-1

  • 本文向大家介绍有关Ajax跨域问题的两种解决方法,包括了有关Ajax跨域问题的两种解决方法的使用技巧和注意事项,需要的朋友参考一下 概述 Ajax跨域是前端开发中常见的问题,本文描述了以Google浏览器Chrome作为客户端和以Tomcat作为Web服务器的情况下的解决办法。 问题现象 当出现跨域访问的时候ajax通常会报类似如下错误: XMLHttpRequest cannot load ht

  • 本文向大家介绍注解@CrossOrigin解决跨域的问题,包括了注解@CrossOrigin解决跨域的问题的使用技巧和注意事项,需要的朋友参考一下 注解@CrossOrigin 出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。来自EVILL的脚本不能够对你的银行API做出Ajax请求(从你的帐户中取出

  • 本文向大家介绍Ajax请求WebService跨域问题的解决方案,包括了Ajax请求WebService跨域问题的解决方案的使用技巧和注意事项,需要的朋友参考一下 1、背景   用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2、出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容); 3、解决方案: (1) J