OVSolitario-io

导航

二分&二分答案(糖果模型,二分+暴力)

对于n,二分查找最多会执行logn次

log函数:其中OI中以2为底,且向上去整:有1000 = 2^10 = 1024

二分(不断划分区间最后找到目标值)

对于二分, 每次折半n,n/2,n/4···1的次数即logn

点击查看代码
int l = 1, r = n, ans = -1
    while(l <= r) {
        int mid = (l + r) / 2;
        if(q[mid] == x) {
            ans = mid;
            break;
        }
        else if(q[mid] <= x) {
            l = mid + 1;
        } 
        else {
            r = mid - 1;
        }
    }

对于第一个or最后一个:采用不退出二分,继续找

点击查看代码
int l = 1, r = n, ans = -1;
while(l <= r) {
        int mid = (l + r) / 2;
        if(q[mid] == x) {
            ans = mid;
            // r = mid - 1;找第一个
            l = mid + 1;//找最后一个
        }
        else if(q[mid] <= x) {
            l = mid + 1;
        } 
        else {
            r = mid - 1;
        }
    }

二分答案(思考:是否可以快速判读答案比x大还是小

二分本质是缩小问题规模,将问题变为n/x

image
糖果模型: 糖果只有绿和红两种颜色,且绿色在红色前面,现在他们被糖纸包裹

此问题满足二分性:对于我们找寻位置i上的ai,若为绿那么代表,1~i都为绿,若为红则i~n都为红,此时我们找寻i~n和1~i

对于问题是否能转化为糖果问题(前面都为绿,后面都为红),来判定问题是否满足二分性

对于二分区间的划分:选择中点仅因中点较稳定,三等分点等均可,时间复杂度也同样为logn

三等分点则每次排除1/3或2/3

l,r范围选用

分答案边界根据情况选用即可,有时不用选用整个区间

立方根:选用整个区间立方时会爆long long

posted on 2025-07-27 13:06  TBeauty  阅读(253)  评论(0)    收藏  举报