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

数组 704.二分查找法

左闭右闭

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

middle = (left + right)/2  与  left+ (right - left)/2 

两个最大值的int类型相加,可能会造成越界,目的是求均值,故先减后加,防止越界

左闭右开

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

一是初始right的取值,当左闭右开时,不包括右边的区间,应该等于nums.length

例如有四个数字,0,1,2,3,左闭右闭 [0,3],左闭右开 [0,4) 才能取到相同的数字

二是 目标在左半区间,因为右开,所以搜索时也不包含右边界,故此时搜索区间应该是[0,middle)

左开右闭 

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

一同上

二 left左区间取值,因为middle = (right + left) /2 是向下取整的,导致后续区间的middle取不对,所以需要middle +1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • which 命令在Linux中是一个快速查找可执行文件位置的工具
  • el-table的selection多选表格改为单选
  • 【Diffusion学习】【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路
  • 美式键盘 QWERTY 布局的来历
  • TS 入门(七):TypeScript模块与命名空间
  • Unity宏和编辑器
  • 基础动态规划题目基础动态规划题目
  • Java 快速入门学习 -- Day 2
  • 【持续集成_06课_Jenkins高级pipeline应用】
  • Java常用的API_02(正则表达式、爬虫)
  • 【教学类-67-02】20240716毛毛虫ABB排序
  • 探索十大最佳产品设计软件:软件排行榜揭晓
  • Lora模型训练的参数-学习笔记
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(九)-无人机服务区分离
  • 防火墙-NAT策略和智能选路
  • JS 中的深拷贝与浅拷贝
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Angular数据绑定机制
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java编程基础24——递归练习
  • java概述
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • PHP面试之三:MySQL数据库
  • python docx文档转html页面
  • vue:响应原理
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 从tcpdump抓包看TCP/IP协议
  • 关于extract.autodesk.io的一些说明
  • 记一次和乔布斯合作最难忘的经历
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 排序(1):冒泡排序
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 怎么将电脑中的声音录制成WAV格式
  • 阿里云API、SDK和CLI应用实践方案
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #Linux(make工具和makefile文件以及makefile语法)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (LLM) 很笨
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (六)Hibernate的二级缓存
  • (四)linux文件内容查看
  • (四)事件系统
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .describe() python_Python-Win32com-Excel
  • .gitignore文件---让git自动忽略指定文件