算法札记:二分

二分的本质不是单调性

++二分的本质是序列二分后两段性质不同++

比如对于这个数列:4 3 2 1 5 5 9 8 7 6(5左边的数小于等于5,5右边的数大于等于5)

我要找5第一次出现的位置,一样的可以用二分

为什么

我只需要执行这个任务:将序列划成两段,左段都小于5,右段都大于等于5,取右端第一个点

每次二分,我只需要执行这个判断:当前数(amid)大于等于5 吗?如果是,那他和他右边的数一定满足大于等于5,此时我想要的肯定在l~mid,缩右边界r=mid,反之缩左边界l=mid+1

cpp 复制代码
while (l<r){
            int mid=l+r>>1;
            if (a[mid]>=k){
                r=mid;
            }else{
                l=mid+1;
            }
        }

若找5最后一次出现的位置,以此类推,懒得打字了

cpp 复制代码
        while (l<r){
            int mid=l+r+1>>1;//???
            if (a[mid]<=k){
                l=mid;
            }else{
                r=mid-1;
            }
        }

//???+1的原因:如果不加一,带数据1 2,我找2,直接死循环

相关推荐
老师我太想进步了202614 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
风影同志7832414 小时前
编码器是激活函数吗?—— 一个看起来很像、其实不是的类比
算法
UIU11415 小时前
P1481 魔族密码
c++·算法·动态规划
加宝的起点雷达18 小时前
40 条候选里 38 条来自同一个源,主卡整屏重样
人工智能·算法·创业
秋天的怀念_David18 小时前
算法一千零一夜 · 第二十六夜 协议的母语
java·spring boot·算法
闻缺陷则喜何志丹21 小时前
【C++特性】四种类型转
c++·算法·类型转换
喵本喵叁肆21 小时前
用 Boosting 把弱隐私算法炼成强隐私算法(英文原题:Boosting and Differential Privacy (FOCS 2010))
算法·集成学习·boosting
青梅味猪大肠21 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统