学习内容

    二分是一种经典的算法思想。利用排除法的思想,可以把线性时间复杂度O(n)的问题优化到O(logn)。不仅能对有序序列进行二分查找。只要在某个边界,左或右满足某种性质,二分就可以找到这个边界。

    整数二分的模板

    1. bool check(int x) {/* ... */} // 检查x是否满足某种性质
    2. // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
    3. int bsearch_1(int l, int r)
    4. {
    5. while (l < r)
    6. {
    7. int mid = l + r >> 1;
    8. if (check(mid)) r = mid; // check()判断mid是否满足性质
    9. else l = mid + 1;
    10. }
    11. return l;
    12. }
    13. // 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
    14. int bsearch_2(int l, int r)
    15. {
    16. while (l < r)
    17. {
    18. int mid = l + r + 1 >> 1;
    19. if (check(mid)) l = mid;
    20. else r = mid - 1;
    21. }
    22. return l;
    23. }

    第 08 天课程题目:

    第 09 天课程题目:

    第 10 天课程题目: