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

算法017:二分查找

二分查找. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/binary-search/

二分查找,其实是双指针的一种特殊情况,但是时间复杂度极低,仅为𝑂(log⁡𝑛),但是二分查找对于数组的要求必须是有序数组才可以。

我们定义一个左指针和右指针,同时把mid设置程left和right的中间值

  1. 先让mid处的数字和target相比较
  2. 如果是 mid > target,说明需要找的值比mid要小,区间在left到mid之间,此时把right指针换到mid的左边,这样就能完成对一般的筛选。
  3. mid < target则是一样的,只不过翻了过来,把left指针换到mid的右边

当mid处的值和target相等的时候,返回mid处的值。

最终当left > right时,停止循环。如停止循环,则说明没有想要找的值。

另外有一个小细节:

在确定mid的值的时候,为了防止数字太大溢出,不能直接用left + right再除以二这样的方式,而最好用   left + (right - left) / 2 这样的方式,只要右指针不超过最大值,那么mid的值就是有效的。

代码:

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【MySQL-17】存储过程-[变量篇]详解-(系统变量&用户定义变量&局部变量)
  • 基于chrome插件的企业应用
  • Spark内核的设计原理
  • 1.1 OpenCV __ Introduction
  • 【Drone】drone编译web端 防墙策略 | 如何在被墙的状态drone顺利编译npm
  • Air780EP-AT开发-HTTP应用指南
  • RabbitMQ的学习和模拟实现|sqlite轻量级数据库的介绍和简单使用
  • Zabbix监控系统:zabbix服务部署+基于Proxy分布式部署+zabbix主动与被动监控模式
  • 在Linux、Windows和macOS上释放IP地址并重新获取新IP地址的方法
  • 探索Mojo模型的超参数优化:自定义搜索策略全解析
  • Anaconda下安装配置Jupyter
  • 如何给7Z分卷文件设置密码?简单几步给文件加上安全锁
  • Python 全栈体系【三阶】(三)
  • 道可云元宇宙每日资讯|国家数据局:积极探索区块链创新应用
  • 站在资本投资领域如何看待分布式光纤传感行业?
  • 0x05 Python数据分析,Anaconda八斩刀
  • 10个确保微服务与容器安全的最佳实践
  • 2017前端实习生面试总结
  • Apache的80端口被占用以及访问时报错403
  • IDEA常用插件整理
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • mockjs让前端开发独立于后端
  • webpack4 一点通
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 成为一名优秀的Developer的书单
  • 浮现式设计
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 无服务器化是企业 IT 架构的未来吗?
  • 与 ConTeXt MkIV 官方文档的接驳
  • 找一份好的前端工作,起点很重要
  • 自制字幕遮挡器
  • C# - 为值类型重定义相等性
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • (1)常见O(n^2)排序算法解析
  • (6)添加vue-cookie
  • (附源码)php投票系统 毕业设计 121500
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (六)c52学习之旅-独立按键
  • (六)DockerCompose安装与配置
  • (论文阅读40-45)图像描述1
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ../depcomp: line 571: exec: g++: not found
  • .a文件和.so文件
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET NPOI导出Excel详解
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net连接MySQL的方法
  • ??javascript里的变量问题