PriorityQueue 和三元运算符
PriorityQueue and ternary operator
在method_one中:
PriorityQueue<Integer> bigger = lower.size() > higher.size() ? lower : higher;
PriorityQueue<Integer> smaller = lower.size() > higher.size() ? higher : lower;
在method_two中:
PriorityQueue<Integer> bigger = lower.size() > higher.size() ? lower : higher;
PriorityQueue<Integer> smaller = lower.size() < higher.size() ? lower : higher;
这里lower
是Max_heap优先队列,higher
是Min_heap优先队列
第 2 行和第 4 行相同,但得到错误答案。
并在第 4 行使用第 2 行时得到正确答案。
为什么这种奇怪的行为,即使它们是相同的?
行2:
if lower.size() == higher.size()
然后选择降低
行4:
if lower.size() == higher.size()
然后选择更高
这就是区别。如果你在使用更高优先级队列或更低优先级队列时出错,你会得到不同的答案。
来自 @Andreas 有问题的评论此行添加:
>
的倒数是<=
,不是<
在method_one中:
PriorityQueue<Integer> bigger = lower.size() > higher.size() ? lower : higher;
PriorityQueue<Integer> smaller = lower.size() > higher.size() ? higher : lower;
在method_two中:
PriorityQueue<Integer> bigger = lower.size() > higher.size() ? lower : higher;
PriorityQueue<Integer> smaller = lower.size() < higher.size() ? lower : higher;
这里lower
是Max_heap优先队列,higher
是Min_heap优先队列
第 2 行和第 4 行相同,但得到错误答案。 并在第 4 行使用第 2 行时得到正确答案。 为什么这种奇怪的行为,即使它们是相同的?
行2:
if lower.size() == higher.size()
然后选择降低
行4:
if lower.size() == higher.size()
然后选择更高
这就是区别。如果你在使用更高优先级队列或更低优先级队列时出错,你会得到不同的答案。
来自 @Andreas 有问题的评论此行添加:
>
的倒数是<=
,不是<