当前位置: 首页 > article >正文

【算法篇·更新中】C++秒入门(附练习用题目)

一.二分

1.二分查找

我们来看这样一道题:

有一个保证有序的数组a,它的长度为n。现在我们需要知道这个序列是否含有x。
数据范围:保证n<=1e9

我们看到这道题之后,第一时间想到的就是暴力枚举了,可是我们发现直接枚举会超时。所以我们只能使用一种n logn时间复杂度的算法。
那么能满足n logn时间复杂度的算法,二分查找是首选项。

二分查找怎么找?

二分查找,俗称折半查找法。
折半查找法,顾名思义,每次将查找范围缩小,来达到优化时间的目的。
我们可以设序列a={1,10,25,30,101,234},l为查找的左边界(搜索起点),r为查找的右边界(搜索终点),要查找它是否包含的数是4。
那么搜索起点就是1,终点就是n(a的长度)。
我们一定会用循环,可是,用哪种循环?条件是什么?
很明显,有条件才循环,所以用while循环
由于左边界在往右搜,右边界在往左搜,所以条件是l<r
原理:
左边最大的都小于了这个数,故不可能这个数在左边存在,同样,右边最小的都大于了这个数,故不可能这个数在右边存在。
如果最后搜索完了却依然没有找到,就输出No;
核心代码(模板):

l=1,r=n;
while(l<=r)
{
    mid=(l+r)/2;
    if(a[mid]>m[i])
    {
        r=mid-1;
    }
    else if(a[mid]<m[i])
    {
        l=mid+1;
    }
    else
    {
        cout<<"Yes"<<endl;
        return 0;
    }
}
if(l>r)
{
    cout<<"NO"<<endl;
}

2.二分答案

刚才我们已经学了二分查找,那么二分答案也就没有太难了。
二分答案指的是给定了答案的范围,来二分查找最小的可能中最大的情况或最大的可能中最小的情况。

二分查找&二分答案练习题目【二分答案可作为挑战题】

练习必做题1,难度普及-
练习必做题2,难度普及-
挑战题1
挑战题2


http://www.kler.cn/a/522021.html

相关文章:

  • MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
  • UE求职Demo开发日志#15 思路与任务梳理、找需要的资源
  • typescript 简介
  • uniapp使用uni.navigateBack返回页面时携带参数到上个页面
  • DeepSeek R1学习
  • TCP是怎么判断丢包的?
  • 【C语言基础】编译并运行第一个C程序
  • 消息队列MQ面试题解,基础面试题
  • 美国本科申请文书PS写作中的注意事项
  • 【Linux基础指令】第二期
  • Oracle 12c 中的 CDB和PDB的启动和关闭
  • 数字人+展厅应用方案:开启全新沉浸式游览体验
  • SimpleFOC STM32教程10|基于STM32F103+CubeMX,速度闭环控制(有电流环)
  • IO进程线程复习
  • 新项目上传gitlab
  • 日志收集Day007
  • RK3588平台开发系列讲解(ARM篇)ARM64底层中断处理
  • 一文讲解Java中的equals和hashCode方法
  • VSCode 设置为中文(Configure Display Language)
  • HarmonyOS:ForEach:循环渲染
  • HPO3:提升模型性能的高效超参数优化工具
  • 24小R的随机播放顺序
  • 使用TensorFlow实现逻辑回归:从训练到模型保存与加载
  • 信息学奥赛一本通 2110:【例5.1】素数环
  • 2025数学建模美赛|A题成品论文
  • 神经网络|(六)概率论基础知识-全概率公式