这半年刷了不少题,看了很多优秀的题解,有点小心得
发现很多hard题,需要推理出一些关键结论,再根据这个结论去解题就会很easy。
就像是以前做数学证明题的感觉,推不出关键结论,完全解不了题,推出来则势如破竹。
大家可以尝试下用二分答案的方式先做下这题 2141. 同时运行 N 台电脑的最长时间,应该能发现二分答案过程中,”验证答案“容易超时

这里引用了 @灵茶山艾府的题解,红框中是这题的关键结论。以这个结论为基础,这道题立马变为easy。
ps:我甚至在看了这个结论后,都不能很快证明其充分性,更别说自己想出这个结论了。
class Solution {
public:
long long maxRunTime(int n, vector<int>& b) {
int m = b.size();
long l = 0, r = accumulate(b.begin(), b.end(), 0L) / n;
while (l <= r) {
long mid = (l + r) / 2;
long sum = 0;
for (long i : b) {
sum += min(mid, i);
}
if (sum >= (long)mid * n) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return r;
}
};还有很多题做起来都是这种感觉,找不到关键推论就没有任何思路。有点像dp的时候找不到状态转移方程
1、我认为这种推理能力需要一定的天赋
2、我不清楚怎样练习 才能高效提升这种能力 QAQ
3、做题越多越发现和佬的差距越大