我知道关于这个问题有很多答案。我试着跟随它,但它不会显示我想要的结果。有一个
输入
603
502
201
402
303
301
我希望
输出
60 3
50 2
40 2
30 3
30 1
20 1
但是如果我打印优先级队列,它将显示
60 3
50 2
40 2
20 1
30 3
30 1
我不知道为什么。。
下面是我的代码
import java.util.*;
public class MaximumIncomeSchedule {
static class Schedule {
int income;
int date;
public Schedule(int i, int d) {
income = i;
date = d;
}
}
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue<Schedule> pq = new PriorityQueue<>(n,(o1, o2) -> {
if(o2.income==o1.income)
return o2.date - o1.date;
return o2.income - o1.income;
});
int mD = 0;
for (int i = 0; i < n; i++) {
int M = sc.nextInt();
int D = sc.nextInt();
Schedule s = new Schedule(M, D);
pq.add(s);
mD = Math.max(mD, D);
}
for (Schedule s : pq) {
System.out.println("income:" + s.income + " " + "time: " + s.date);
}
}
}
您的比较器lambda是正确的,您可以按原样使用它。您只需要轮询队列,以便以正确的顺序获取元素:
java prettyprint-override"> while (!pq.isEmpty()) {
Schedule s = pq.poll();
System.out.println("income:" + s.income + " " + "time: " + s.date);
}
我试图使用PriorityQueue对字符串列表进行排序并删除重复项。最初我使用PriorityQueue,它不会更改顺序。我换了树集后,它起作用了。但是,我想了解优先级队列和定义比较器的问题是什么。想听听解释。
我在下面有下面的Java代码,我正在尝试将其转换为Swift。如果有人能在这个问题上帮助我,我将非常感激。 谢谢
我有两个数组X 期望结果:[(1 , 2), (4 , 13), (5 , 16), (6 , 5), (6 , 9), (7 , 5), (9 , 4), (13 , 1), (13 , 8), (20 , 7)] 实际结果:[(1,2)、(6,5)、(4,13)、(7,5)、(6,9)、(13,1)、(5,16)、(20,7)、(9,4)、(13,8)] 我知道我想在这里实现的可以用其他数据结
问题内容: 我如何对我要排序的东西进行排序? 另外,和方法之间有区别吗? 问题答案: 使用构造函数重载,该重载采用并传入一个比较器,该比较器以适合你的排序顺序的方式进行比较。如果你举一个如何排序的例子,如果不确定,我们可以提供一些示例代码来实现比较器。(虽然非常简单。) 正如其他地方所说:和只是不同的接口方法实现。在JDK源代码中,请致电。尽管由于具有指示由于大小限制而无法添加该值的能力,通常和可
问题内容: 我在Java中有一个双打列表,我想按降序对ArrayList进行排序。 输入如下: 输出应该是这样的 问题答案: 那会做你想要的。请记住要导入!
我有一个数据库表,我想对其进行筛选,然后按相反(降序)顺序进行排序。我如何在类似于以下内容的速度流中表达: 我希望我的SQL查询能够通过速度优化,因此我不能使用匿名lambda。