java 中整数数组的优先级队列
Priority Queue of an array of integers in java
我想通过数组 [[0, 30],[5, 10],[15, 20]] 的第二个元素进行比较。
PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);
但是我收到如下错误
第 8 行:错误:需要数组,但找到对象
PriorityQueue heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);
^
第 8 行:错误:需要数组,但找到对象
PriorityQueue heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);
^
2 个错误
好吧,在您的示例中,您有一个二维数组;但是,在您的代码片段中,您假设一个一维数组应该保存在队列中。那么,你的问题是什么?您确定要维护二维数组队列吗?这并不意味着您将拥有 pairs/tuples 的队列,这意味着该队列中的每个元素都将是一个离散的二维数组对象。在这种情况下,可能每个数组都会有一个以上的元素……这意味着您很可能应该遍历它们……但是如果您确定要通过此代码实现什么并且它是正确的,那么您可以这样比较第一个元素:
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
}
});
您应该先将 a 转换为 int 数组。
PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> ((int[])a)[1] - ((int[])b)[1]);
你可以使用 Integer.compare
PriorityQueue<int[]> heap = new PriorityQueue<>(intervals.length, (a,b) -> Integer.compare(a[1],b[1]));
您可以使用:
PriorityQueue<int[]> pq = new PriorityQueue<>(intervals.length,
Comparator.comparingInt(interval -> interval[1]));
只需在 PriorityQueue 后添加“<>”:
PriorityQueue<int[]> heap = new PriorityQueue<>(intervals.length, (a, b) -> a[1] - b[1]);
我想通过数组 [[0, 30],[5, 10],[15, 20]] 的第二个元素进行比较。
PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);
但是我收到如下错误
第 8 行:错误:需要数组,但找到对象
PriorityQueue
^ 2 个错误
好吧,在您的示例中,您有一个二维数组;但是,在您的代码片段中,您假设一个一维数组应该保存在队列中。那么,你的问题是什么?您确定要维护二维数组队列吗?这并不意味着您将拥有 pairs/tuples 的队列,这意味着该队列中的每个元素都将是一个离散的二维数组对象。在这种情况下,可能每个数组都会有一个以上的元素……这意味着您很可能应该遍历它们……但是如果您确定要通过此代码实现什么并且它是正确的,那么您可以这样比较第一个元素:
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
}
});
您应该先将 a 转换为 int 数组。
PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> ((int[])a)[1] - ((int[])b)[1]);
你可以使用 Integer.compare
PriorityQueue<int[]> heap = new PriorityQueue<>(intervals.length, (a,b) -> Integer.compare(a[1],b[1]));
您可以使用:
PriorityQueue<int[]> pq = new PriorityQueue<>(intervals.length,
Comparator.comparingInt(interval -> interval[1]));
只需在 PriorityQueue 后添加“<>”:
PriorityQueue<int[]> heap = new PriorityQueue<>(intervals.length, (a, b) -> a[1] - b[1]);