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

LeetCode 704.二分查找

LeetCode 704.二分查找

image-20241218220335497

思路🧐:

  在本篇以及之后几篇的博客中,博主将会用二分法进行解答,以此巩固二分题型。二分法一般用于具有二段性的数据中使用。比如该题为有序数组,需要我们查找一个目标值target,分析后发现,这段数据中会出现三种情况,大于target,小于target,等于target,而等于target是我们的目标,于是可以判断出,这个数组是具有二段性的,以target进行分段,由此得出使用二分法。

  我们以下面数组进行举例,首先求出一个中间值,这里我使用left + (right - left) / 2求得中间值,在某些情况下,需要在right - left后面再加上1,否则会导致死循环,具体在之后的篇章中会进行说明。求出中间值nums[mid]=3后,此时target大于3,于是可以得出,[left,mid]之间的所有数据,都不可能含有9,则可以舍去这段区间,得到left = mid + 1,然后再次进行该过程。假如nums[mid] > target,则表示[mid,right]区间可以舍去,则right = mid - 1。当nums[mid] == target时,表示找到了目标值,即可返回。如果left > right,表示整个数组都找完了也没找到目标值,返回-1。

image-20241218221108111

代码🔎:

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;while(left <= right){int mid = left + (right - left) / 2;if(target > nums[mid])left = mid + 1;else if(target < nums[mid])right = mid - 1;else return mid;}return -1;}
};

时间复杂度:O(LogN)  空间复杂度:O(1)
image-20241218222607671

http://www.lryc.cn/news/505835.html

相关文章:

  • Linux介绍与安装CentOS 7操作系统
  • 使用 rbenv 切换 Ruby 版本
  • C语言(结构体练习)
  • 你了解网络层的 ICMP 吗?
  • 清理C盘小记
  • Excel中如何消除“长短款”
  • 超越 RAG 基础:AI 应用的高级策略
  • [shader]【图形渲染】【unity】【游戏开发】 Shader数学基础2-认识点和矢量
  • 微软开源Python Markdown转换工具
  • 安装与配置MongoDB 6.0以支持远程连接
  • 零衍门户国际化:助力拓展全球视野
  • mysql免安装版配置教程
  • kafka的处理的一些问题 消费延迟
  • 旅游创业,千益畅行,开启新的旅游模式!
  • 集成自然语言理解服务,让应用 “听得懂人话”
  • 利用notepad++删除特定关键字所在的行
  • [HNOI2002] 营业额统计 STL - set集合
  • fastAPI接口(普通流式响应和大模型流式响应)
  • Linux系统安装node.js
  • 《解决两道有趣的编程问题:交替数字和与简单回文》
  • 2412d,d的8月会议
  • WEB自动化测试(selenium工具)框架、面试题
  • 前端自动化部署之ssh2和ssh2-sftp-client
  • python pandas 优化内存占用(一)
  • FutureCompletableFuture实战
  • Loki 微服务模式组件介绍
  • peerDependencies对等依赖
  • 贪心算法 part01
  • java开发入门学习二 - 变量
  • Qt Q_ENUM enum 转 QString 枚举字符串互转; C++模板应用