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

在Java中循环遍历堆栈值

贝浩歌
2023-03-14

在给定的数组中,我想计算左边唯一的连续值,这些值小于或等于每个值。

例如在下面的数组中,第一个索引值是100,所以没有比它更小的值,它将是1。对于值70,有60比它小,所以计数是2,依此类推。

注意:这应该使用stack来完成(这是一个stack实践问题)。

我的方法是:

我试图用这种方式解决:

  1. 在数组中运行循环,每次向堆栈添加数组值

问题:现在的问题是:因为堆栈。pop()它第一次会正常工作,但下一次不会。

问:我的问题是,如果没有stack.pop(),我如何循环遍历堆栈?

代码:以下是我正在尝试的:

public static int[] getStockSpan(int[] prices) {

        int[] arr = new int[prices.length];
        Stack<Integer> stack = new Stack<>();

        for ( int i = 0; i < prices.length; i++ ) {

            if ( stack.size() == 0 ) {

                arr[0] = 1;

            } else {

                if ( stack.peek() > prices[i] ) {

                    arr[i] = 1;

                } else {

                    int count = 1;

                    while ( stack.size() > 0 && stack.peek() <=  prices[i] ) {
                        count++;
                        stack.pop();
                    }

                    arr[i] = count;

                }

            }

            stack.push(prices[i]);

        }

        return arr;

    }

共有1个答案

莫乐
2023-03-14

在java中导入以下内容:

import java.util.*;
import java.util.Stack;

然后用以下代码替换代码:

public static int[] getStockSpan(int[] prices) {

        int[] arr = new int[prices.length];
        Stack<Integer> stack = new Stack<>();

        for ( int i = 0; i < prices.length; i++ ) {

            if ( stack.size() == 0 ) {

                arr[0] = 1;

            } else {

                if ( stack.peek() > prices[i] ) {

                    arr[i] = 1;

                } else {

                    int count = 1,t=0;
                    Iterator iter=stack.iterator();
                    int ia[]=new int[prices.length];
                    while ( iter.hasNext()  ) {
                        Integer k= (Integer)iter.next();

                        ia[t++]=k.intValue();
                    }
                    for(int j=t-1;j>=0;j--)
                    {

                        if(ia[j] <=  prices[i])
                            count++;
                        else
                            break;   
                    }
                    arr[i] = count;
                }
            }
            stack.push(prices[i]);
        }
        return arr;
    }
 类似资料:
  • 问题内容: 我正在尝试将使用OpenCV收到的先前答案中的C++方法转换为使用OpenCV Java绑定的Java C ++代码: 我不知道如何像在C代码中那样遍历变量。以下是到目前为止我得到的: Java代码: 我经历了API,似乎确实有获取方法,但是我什么也不能调用。 问题答案: 如果确实是 灰色 ,则可能是以下类型: 我没有设置环境来测试此代码。有关更多信息,请检查此线程。 如果您使用的是

  • 问题内容: 我正在尝试遍历以下内容 我到目前为止所得到的: 有任何想法吗? 问题答案: 在您的代码中,元素是JSON对象的数组,而不是JSON对象本身。元件,和是JSON的一部分内部对象JSON阵列。 您需要遍历数组 版画 我不知道您的代码片段来自何处。

  • 我试图通过将ajax请求中的for循环的值发送到php文件来检查数据库中的值,“each value in request”,然后文件返回变量“avl”,如果不是,则不可用。 问题是,我检查了一个值流,它们都必须返回才能继续我的过程,但条件不会等到for循环结束才进行检查。它在for循环启动之前检查条件,即使代码也不是那样的。例如:在for循环在第50行结束之前,它在第100行执行条件。 它总是通

  • 问题内容: 因此,我以为我可以像普通对象一样遍历localStorage,因为它具有长度。我该如何循环? 如果我这样做,则返回正确。所以我认为循环会起作用。 我在想类似的东西: 但无济于事。有任何想法吗? 我的另一个想法是 在其中工作。 问题答案: 您可以使用该方法。 返回第一个键(顺序是实现定义的,但是在您添加或删除键之前是恒定的)。 如果顺序很重要,则可以存储JSON序列化数组: 规范草案声称

  • 问题内容: 我有一个具有1 2 3 4 5值的数组。 现在我想以循环方式遍历它。像我想打印2 3 4 5 1或3 4 5 1 2或5 1 2 3 4等等。有什么 算法 吗? 编辑: 我想以循环方式打印所有组合。我不想在初始阶段说明起点。 问题答案: (如果要从向下迭代数组,请在数组下标表达式中更改为。) 我应该注意,就执行速度而言,这可能不是表达循环的最有效方法。但是,差异很小,并且 很可能无关紧

  • 问题内容: 我正在尝试编译以下代码: 我在for行中看到一条错误消息: 该方法返回一个(但在这种情况下,返回的结构)。 是我为应用程序创建的枚举(在另一个类文件-中)。 当我在中创建具有相同结构的foreach循环时,我没有遇到此问题。 我究竟做错了什么? 问题答案: 一种更有效的方法: 如果有可能,请定义“ getData”,以便您不需要强制转换。