[学习一些DP并遇到PQ用作某些问题的堆,但是,在我的脑海中,越来越难知道比较器的投篮手lamda;
例如:
class Interval {
int start = 0;
int end = 0;
Interval(int start, int end) {
this.start = start;
this.end = end;
}
}
PriorityQueue<Integer> maxStartHeap = new PriorityQueue<>(n, (i1, i2) -> intervals[i2].start - intervals[i1].start);
PriorityQueue<Integer> maxEndHeap = new PriorityQueue<>(n, (i1, i2) -> intervals[i2].end - intervals[i1].end);
一个int减去另一个int如何创建所需的最小或最大的第一顺序?我想尝试可能的实现,但不知道从哪里开始。有人可以指出我可以解释确切情况的资源的情况吗,如果比较器的外观基于最大负数,则它是比较器的外观,这是头等大事,但这仅是猜测。
类似于此:
new PriorityQueue<>(n, new Comparator<Integer>() {
public int compare(Integer one, Integer two) {
return intervals[one] - intervals[two];
}
});
就是说,您可能不希望基于外部数组对比较器进行排序。我会发布更多您的代码(例如,您如何使用intervals
)。在这种情况下,Comparator
用于对PriorityQueue
中的元素进行排序。您可能正在比较Interval
对象队列中的间隔:
class Interval {
//...
public int difference() {
return this.end - this.start;
}
}
PriorityQueue<Interval> values = new PriorityQueue((i1, i2) -> Integer.compare(i1.difference(), i2.difference()));
//AKA
PriorityQueue<Interval> values = new PriorityQueue(Comparator.comparingInt(Interval::difference)));
这将基于values
的各个值对Interval#difference
进行排序。如果您在Java 8上仍然落后一些,我将进一步研究函数api和方法引用。