分享丨刷题心得 —— 证明题的思维方式 对于解算法题很重要
970
2024.12.19
2024.12.19
发布于 中国

简介

这半年刷了不少题,看了很多优秀的题解,有点小心得
发现很多hard题,需要推理出一些关键结论,再根据这个结论去解题就会很easy。
就像是以前做数学证明题的感觉,推不出关键结论,完全解不了题,推出来则势如破竹。


举个栗子

大家可以尝试下用二分答案的方式先做下这题 2141. 同时运行 N 台电脑的最长时间,应该能发现二分答案过程中,”验证答案“容易超时

image.png

这里引用了 @灵茶山艾府的题解,红框中是这题的关键结论。以这个结论为基础,这道题立马变为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、做题越多越发现和佬的差距越大

评论 (7)