Q

一种常见的情况是,在一个函数中维护最大值 && 返回最大值对应的情况。

常见的写法是

...
if cur > _max:
    ans = new_ans
    _max = cur
...
return ans

虽然可以接受,但是非常丑。而且涉及了赋值操作。


A

方法 1

import queue
pq = queue.PriorityQueue()
...
pq.put((cur, new_ans))
...
return pq.queue[0][-1]

利用 cur 作为 key 往大小 = 1 的 pq 里塞东西。(每次塞完就弹,弹剩下的就是要的)(pq 是升序)

c++ 可以往 pq 里传入 cmp。但是 cpp 的 pq 没有 maxsize 选项。

突发奇想,假如 pq 的构造函数使用 std::array

#include <queue>
#include <array>
auto pq = std::priority_queue<int, std::array<int , 1>>{};
int main(){
  pq.push(1);
  pq.push(1);
  return 0;
}

报错,查得知

C++报错原因汇总 Q1:为什么error: 'class std::queue<Person>' has no member named 'pop_back_0dayI 若谷的博客-CSDN博客

pq 用的 push 背后调用了容器的 push_back 方法。 std::array 没有。


方法 2

def f():
    ...
    yield (cur, new_ans)
    ...
max(f(), key=itemgetter(0))[-1]