代码扔这了:https://www.nowcoder.com/discuss/872814076806688768 想复盘自己看吧Q1 <=3 穷举一下就是 false, 其他情况都是有解的,要么是 n-1, n + 1 要么是 n, n (但是我 Java 一开始写的 超时了改成 CPP 就能过了,感觉是没给 Java 开时限)Q2 找 0 1 边界的最大值和次大值加起来就好了Q3 双指针,维护向左向右两个序列,从大到小遍历向左的数组,那么在当前点之前的 2*k 区间内的向右的人的区间是不断左移动的Q4 最后肯定很快(log 级别)变成 1 和 2,简单算一下 1 变化 x 次答案就是 (x + 1) * 2 ^ x, 2 变化 x 次答案就是 2 ^ (x + 1)