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

java中整数数组的优先级队列

范侯林
2023-03-14

我想通过数组的第二个元素[0,30],[5,10],[15,20]进行比较。

PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);

但我得到一个错误如下

第8行:错误:需要数组,但找到了对象PriorityQueue

^2个错误

共有3个答案

籍永安
2023-03-14

在你的例子中,你有一个2D数组;然而,在您的代码片段中,您假设队列中应该保留一个一维数组。那么,你的问题是什么?是否确实要维护二维阵列队列?这并不意味着你会有一个成对/元组的队列,也就是说,队列中的每个元素都是一个离散的2D数组对象。在这种情况下,每个数组可能有多个元素。。这意味着,您很可能应该遍历它们。。但是,如果您确定要用这段代码实现什么并且它是正确的,那么您可以像这样比较第一个元素:

    PriorityQueue<int[][]> heap = new PriorityQueue<int[][]>((a, b) -> {
        if (a[0][0] > b[0][0]) {
            return 1; //change according to your logic
        } else if (a[0][0] < b[0][0]) {
            return -1; //change according to your logic
        } else {
            return 0; //change according to your logic
        }
    });
养聪
2023-03-14

你可以用我nteger.compare

PriorityQueue<int[]> heap = new PriorityQueue<>(intervals.length, (a,b) -> Integer.compare(a[1],b[1]));
林龙野
2023-03-14

您应该首先强制转换为int数组

PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> ((int[])a)[1] - ((int[])b)[1]);
 类似资料:
  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 注意:我知道可以用比较器创建优先级队列,然后重复调用Add。

  • 我所拥有的是一个类,它创建了一个具有优先级、到达时间和完成时间的对象。我还有许多优先级队列可以将它们放入其中。当我开始时,我将它们放入到达队列中,对它们进行排序,然后查看哪个第一个进入,并将其放入队列中。但是,当我尝试向到达队列添加第二个队列时,它会失败并抛出一个异常。我首先要做的是将所有进程添加到到达队列中,然后对它们进行排序,这样到达时间最短的进程将是到达队列中第一个进入队列的进程。谢谢你帮忙

  • 我定义最大优先级队列如下: 我需要理解这是如何工作的,特别是当1只得到2的索引(而不是4)时? 多谢了。

  • 我试图实现Dijkstra算法的一个版本,以找到公共汽车从起点到终点的最短路线。不幸的是,我似乎找不到swift提供优先级队列类型的库或其他方式,所以我似乎必须自己编写代码。 话虽如此,有人能指出我做这件事的正确方向吗? 目前我的想法如下: 到目前为止这是我的代码。似乎太短太残忍了...我一定是在概念上漏掉了什么。

  • 我有一个,名为,其中包含类型的对象。 您可以在所有车辆上调用该方法。 我要做的是排序,这样车辆被赋予更高的优先级,并被放在队列的前面。 我假设我必须在这里使用一个比较器,但不知道怎么做。