算法札记:二分

二分的本质不是单调性

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

比如对于这个数列: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,直接死循环

相关推荐
徐小夕3 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
可编程芯片开发4 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
小小仙子5 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
中微极客6 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek6 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
元Y亨H7 小时前
开发者必须掌握的十大核心算法
算法
元Y亨H7 小时前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H7 小时前
数据结构与算法的通俗指南
数据结构·算法
2301_764441337 小时前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模