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

【算法篇·更新中】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.lryc.cn/news/527352.html

相关文章:

  • 对神经网络基础的理解
  • 存储基础 -- SCSI命令格式与使用场景
  • 从崩溃难题看 C 标准库与 Rust:线程安全问题引发的深度思考
  • 【CSS入门学习】Flex布局设置div水平、垂直分布与居中
  • 9. 神经网络(一.神经元模型)
  • R 语言 | future 包,非阻塞的执行耗时脚本
  • UE学习日志#12 Niagara特效大致了解(水文,主要是花时间读了读文档和文章)
  • 【数据结构】_链表经典算法OJ:合并两个有序数组
  • Mongodb副本集群为什么选择3个节点不选择4个节点
  • 基于 WEB 开发的手机销售管理系统设计与实现内容
  • LeetCode - Google 大模型校招10题 第1天 Attention 汇总 (3题)
  • Vue3 provide/inject用法总结
  • Linux——网络基础(1)
  • 【记录】日常|从零散记录到博客之星Top300的成长之路
  • 【二分查找】力扣373. 查找和最小的 K 对数字
  • 池化层Pooling Layer
  • 力扣算法题——11.盛最多水的容器
  • 自由学习记录(32)
  • VScode+Latex (Recipe terminated with fatal error: spawn xelatex ENOENT)
  • 「蓝桥杯题解」蜗牛(Java)
  • PHP EOF (Heredoc) 详解
  • pyautogui操控Acrobat DC pro万能PDF转Word,不丢任何PDF格式样式
  • Day32:字符串的复制
  • 基于Mybatis继承AbstractRoutingDataSource使用自定义注解实现动态数据源
  • ZooKeeper 数据模型
  • 【VUE】Vue2中Vue.extend方法
  • MaskGAE论文阅读
  • Mybatis-plus 更新 Null 的策略踩坑记
  • Oracle迁移DM数据库
  • HTML特殊符号的使用示例