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

问题描述 投票:0回答:6

我想比较以下数组的第二个元素:

int[][] intervals = new int[][]{new int[]{0, 30},new int[]{5, 10},new int[]{15, 20}};

我的带有自定义比较器的优先级队列:

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

但我收到以下 2 个错误:

Line 8: error: array required, but Object found
        PriorityQueue<Integer[]> heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);
                                                                                       ^
Line 8: error: array required, but Object found
        PriorityQueue<Integer[]> heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);
                                                                                             
java heap priority-queue min-heap
6个回答
6
投票

您应该首先将 a 转换为 int 数组。

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

5
投票

您可以使用 Integer.compare

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

4
投票

只需在 PriorityQueue 后添加“<>”即可:

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

3
投票

嗯,在您的示例中,您有一个 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
        }
    });

3
投票

您可以使用:

PriorityQueue<int[]> pq = new PriorityQueue<>(intervals.length,
                             Comparator.comparingInt(interval -> interval[1]));

2
投票

您的代码缺少一个重要的语法。您可以将

<>
<int[]>
添加到赋值语句的 RHS 中,它将起作用。所以该行语句将变为:

PriorityQueue<int[]> heap = new PriorityQueue<int[]>(intervals.length, (a, b) -> a[1] - b[1]);
© www.soinside.com 2019 - 2024. All rights reserved.