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

LeetCode:704. 二分查找

简介

题目链接:https://leetcode.cn/problems/binary-search/description/

解决方式:数组 + 二分查找

这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!

二分查找系列题:
34. 在排序数组中查找元素的第一个和最后一个位置(进阶)

二分查找

思路:题目所给数组是升序的,所以我们可以初始化两个左右指针,分别指向第一个和最后一个元素。每次迭代的时候先计算中间点,根据中间点判断向何处收缩区间。

具体可参考labuladong大佬关于二分查找一系列的详细题解!

classSolution{publicintsearch(int[]nums,inttarget){// 左右边界intleft=0;intright=nums.length-1;// 二分查找while(left<=right){// 中点// 由数学公式 (left + right) / 2 等价而来,防止整数溢出intmid=left+(right-left)/2;if(nums[mid]>target){// 目标在左侧,向左收缩right=mid-1;}elseif(nums[mid]<target){// 目标在右侧,向右收缩left=mid+1;}else{// 中点元素就是目标元素,直接返回// 由于此题找到即可,而不是寻找左右边界,所以直接返回returnmid;}}// 没有找到,返回 -1return-1;}}

拓展

寻找左边界

思路:为了寻找左边界,中间点等于目标元素时不能直接返回,而是进一步向左收缩,减小范围,直到找到左边界。

intleft_bound(int[]nums,inttarget){intleft=0,right=nums.length-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]<target){left=mid+1;}elseif(nums[mid]>target){right=mid-1;}elseif(nums[mid]==target){// 别返回,进一步减小范围right=mid-1;}}// 检查 left 越界的情况// 一种是目标元素比数组所有元素都大,left = nums.length// 一种是目标元素在数组范围中,但是没有目标元素if(left>=nums.length||nums[left]!=target)return-1;returnleft;}

寻找右边界

思路:与寻找右边界同理。

intright_bound(int[]nums,inttarget){intleft=0,right=nums.length-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]<target){left=mid+1;}elseif(nums[mid]>target){right=mid-1;}elseif(nums[mid]==target){// 别返回,进一步减少范围left=mid+1;}}// 检查 right 越界的情况// 一种是目标元素比数组所有元素都小,right < 0// 一种是目标元素在数组范围中,但是没有目标元素if(right<0||nums[right]!=target)return-1;returnright;}
http://www.jsqmd.com/news/535516/

相关文章:

  • DeerFlow智能体技能开发:从零构建自定义Research Agent
  • 生物信息学实战:如何用Python从零构建转录因子结合位点预测工具(附完整代码)
  • HFSS与MATLAB联合仿真:超材料设计的高效之道
  • 告别数据丢失:QQ空间说说备份神器使用指南
  • 告别手动整理:用快马平台生成Python文件自动分类脚本
  • 团队显示器DPI配置标准
  • Windows下Python虚拟环境激活报错?一招搞定PowerShell脚本执行权限问题
  • Qwen3-TTS开源模型落地:图书馆有声读物自动化生产系统架构设计
  • 数据库国产化意味着什么?为什么要数据库国产化?
  • 如何用Freeter重构你的工作流?开源效率工具全解析
  • 【ProtoBuf 语法详解】map 类型
  • 别再只盯着Mesh了!聊聊NoC拓扑选型:从Ring、Torus到Fat Tree,你的芯片设计该怎么选?
  • 2026年郭氏正骨怎么选?三招教你辨真伪选好店,做得好的郭氏正骨聚焦优质品牌综合实力分析 - 品牌推荐师
  • 5大场景解放80%重复工作:n8n-nodes-puppeteer自动化浏览器操作全指南
  • VSCode远程开发新姿势:用Remote-SSH直连Docker容器(附端口避坑指南)
  • 8-Bit硬边框UI×AI生成:Pixel Fashion Atelier界面交互设计与技术实现揭秘
  • OpenClaw+nanobot:QQ聊天机器人配置全流程解析
  • 开源项目问题解决:Ruffle Flash模拟器扩展故障全维度技术方案
  • 为什么90%的Dify RAG项目在生产环境召回率跌破65%?——来自金融/医疗双行业高合规场景的5条血泪法则
  • 《90%考生不知道的蓝桥杯Web提分秘籍!这本书让我一个月逆袭省一》
  • 用快马实践vibe coding:5分钟AI生成你的个人博客原型
  • CVPR2024底层视觉新趋势:用Diffusion模型搞定超分、去噪、修复,实战配置教程(含代码)
  • nli-distilroberta-base模型效果深度评测:多领域文本蕴含任务实战
  • UnityFPSUnlocker深度指南:解锁安卓Unity游戏帧率的终极方案
  • 零拷贝到底是个什么东西?
  • 零基础入门:ComfyUI工作流详解,手把手教你修复泛黄老照片
  • Bypass Paywalls Clean完全使用指南:突破网络内容访问限制的开源方案
  • 开发者效率提升:OpenClaw+Qwen3-32B自动化测试流水线
  • SDMatte与YOLOv11协同工作流:先检测后抠图的自动化流程
  • YALMIP实战:如何用5行代码搞定线性规划问题(含Mosek求解器配置技巧)