每日一道算法题——二分查找

news2024/10/5 23:12:08

文章目录

  • 开口闭口区分:
  • 1、问题
  • 2、示例
  • 3、解决方法
    • (1)注意点
      • (2)代码


开口闭口区分:

开口闭口区分:

  • [1,2,3] 左闭右闭
  • [1,2,3) 左闭右开
  • (1,2,3] 左开右闭

开口如数组(1,2,3)不包含当前数据,也就是指只有2,闭口如数组[1,2,3]表示包含这个数据,也就是指1,2,3
总结:闭口表示包含这个值,开口表示不包含这个值。


1、问题

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 - 1。

2、示例

示例 1:
输入: nums = [-1, 0, 3, 5, 9, 12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1, 0, 3, 5, 9, 12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 - 1

3、解决方法

(1)注意点

注意点1: while 循环中是小于等于还是小于

  • 左闭右闭,如[1,1],你不能保证左右闭口值一样,所以两边都闭口 小于等于
  • 左闭右开,如[1,1),如果左闭合和右闭合值一样,这个区间就不是合法的区间,所以左闭右开是小于,其他同理
    总结:两边开口就小于等于,其他情况小于

注意点2 :循环判断中nums[middle] > target,right是等于 middle -1 还是等于middle
在这里插入图片描述
总结:两边闭合就需要middel-1,否则就是middle

(2)代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function (nums, target) {
  let left = 0
  let right = nums.length
  // 注意点1: 小于等于还是小于,取决于当前是开口还是闭口
  // 假设数组[1,1],这种就不用比较,但你不能保证左右闭口值一样,所以两边都闭口小于等于,其他情况都小于,
  while (left <= right) {
    let middle = (nums[left] + nums[right]) / 2 // 中间值(注意边界值,也就是除出了小数的情况)
    // 注意点2: right = middle -1 还是 = middle 
    if (nums[middle] > target) {
      right = middle -1 
    } else if (left < right) {
      left = middle + 1
    } else {
      return middle
    }
    return -1
  }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

各省-科技创新、研发强度数据(2007-2022年)

研发强度通常指研究与试验发展&#xff08;R&D&#xff09;经费与国内生产总值&#xff08;GDP&#xff09;之比&#xff0c;是衡量一个国家或地区科技活动强度的重要指标。高研发强度往往意味着更强的科技创新能力和更快的技术进步速度。 从地区分布来看&#xff0c;研发…

什么是 HTTP 请求中的 preflight 类型请求

在浏览器的 HTTP 请求中&#xff0c;当我们使用 fetch API 或者 XMLHttpRequest 来进行跨域请求时&#xff0c;浏览器有时会发送一种称为 Preflight 的请求。这种请求是浏览器在实际发送跨域请求前&#xff0c;先与目标服务器进行的一次 “探测” 请求&#xff0c;以确认服务器…

java基础_异常总结详解

1 列举一些列举常见的运行时异常 运行时异常都是 RuntimeException 子类异常 NullPointerException - 空指针异常 ClassCastException - 类转换异常 IndexOutOfBoundsException - 下标越界异常 ArithmeticException - 计算异常 IllegalArgumentException - 非法参数异常 Numb…

C - Separated Lunch

题目链接: C - Separated Lunch (atcoder.jp) 题目描述: 大致意思是&#xff1a;有n个人&#xff0c;让你把他们分为两个组&#xff0c;然后分完后的这两个组的最大值最小为多少&#xff1f; 数据范围&#xff1a; 样例输入&#xff1a; 5 2 3 5 10 12 样例输出&#xff1a;…

二分查找算法——在排序数组中查找元素的第一个和最后一个位置

1.题目解析 题目来源&#xff1a;在排序数组中查找元素的第一个和最后一个位置——力扣 测试用例 2.算法原理 查找左端点 此时根据二段性&#xff0c;需要将数组分为大于target与小于target两部分&#xff0c;然后取出中点位置判断此时中点位置的值与target的大小关系&#xf…

SpringBoot校园资料分享平台:设计与实现

3系统分析 3.1可行性分析 通过对本校园资料分享平台实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本校园资料分享平台采用JAVA作为开发语言&#xff0c;Sprin…

基于Springboot+Vue的计算中心共享平台(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

vSAN02:容错、存储策略、文件服务、快照与备份、iSCSI

目录 vSAN容错条带化存储策略1. 创建新策略2. 应用存储策略 vSAN文件服务文件服务快照与备份 vSAN iSCSI目标服务 vSAN容错 FTT&#xff1a;Fault to Tolerance 允许故障数 故障域&#xff1a;每一台vSAN主机是一个故障域 - 假设3台超融合&#xff08;3计算1存储&#xff09;&…

2024年最新版本神马TV8.5影视APP源码 293TV影视点播系统源码搭建教程 神马TV8.2加强版反编译教程 保姆级小白可搭建 完整版本视频教程

2024年最新版的神马TV影视APP源码&#xff0c;版本号8.5&#xff0c;提供了前所未有的定制化选项和高级功能。用户可以轻松更换应用的包名和名称&#xff0c;确保品牌个性化。此外&#xff0c;该应用采用了动态域名加密技术&#xff0c;增强了数据传输的安全性。它支持自动切换…

【可视化大屏】将柱状图引入到html页面中

到这里还是用的死数据&#xff0c;先将柱状图引入html页面测试一下 根据上一步echarts的使用步骤&#xff0c;引入echarts.js后需要初始化一个实例对象&#xff0c;所以新建一个index.js文件来进行创建实例化对象和配置数据信息等。 //在index.html引入<script src"j…

Redis:zset类型

Redis&#xff1a;zset类型 zset命令ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZREVRANGEBYSCOREZPOPMAXBZPOPMAXZPOPMINBZPOPMINZRANKZREVRANKZSCOREZREMZREMRANGEBYRANKZREMRANGEBYSCOREZINCRBY 集合间操作ZINRERSTOREZUNIONSTORE 内部编码ziplistskiplist 在Redis中&…

文心一言 VS 讯飞星火 VS chatgpt (362)-- 算法导论24.3 4题

四、Gaedel 教授写了一个程序&#xff0c;他声称该程序实现了 Dijkstra 算法。对于每个结点 v ∈ V v∈V v∈V,该程序生成值 u . d u.d u.d 和 v . π v.π v.π 。请给出一个时间复杂度为 O ( V E ) O(VE) O(VE) 的算法来检查教授所编写程序的输出。该算法应该判断每个结…

安卓AI女友项目之安卓AI虚拟数字人整合开发

第9章 安卓AI虚拟数字人整合开发 在人工智能技术的推动下&#xff0c;创建具有交互能力的虚拟数字人已成为现实。本章将指导你如何在安卓平台上整合开发一个AI虚拟数字人应用&#xff0c;包括文字与语音的切换、按住说话输入、与ChatGPT进行文字及语音对话、滑动选择不同虚拟人…

算法篇1:双指针思想的运用(1)--C++

一.算法解析 双指针&#xff0c;顾名思义就是两个指针&#xff0c;常见的算法中&#xff0c;我们可以看到两种&#xff1a; 1.对撞指针&#xff1a;一般用于顺序结构&#xff0c;也称为左右指针。 对撞指针从两端向中间移动。一个指针从最左端开始&#xff0c;另一个从最右端…

Tkinter打包成EXE安装文件

打包成 .exe可执行文件 1. 安装PyInstaller&#xff0c;命令如下&#xff1a; pip install pyinstaller2. 编写你的Tkinter应用程序&#xff1a; 创建一个Python文件&#xff0c;例如app.py&#xff0c;并写入你的Tkinter代码。 3. 在 app.py 文件所在的目录使用PyInstaller…

系统架构设计师⑤:系统性能

系统架构设计师⑤&#xff1a;系统性能 系统的性能指标主要分为2个方面&#xff1a;硬件和软件。 性能指标计算 关键词描述&#xff1a; ①平均每条指令的平均时钟周期个数(CPl&#xff0c;clockperinstruction) ②每(时钟)周期运行指令条数(IPC&#xff0c;instructionper…

OpenCV透视变换

#透视变换 import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(coins.jpg,1)imgInfo img.shape height imgInfo[0] width imgInfo[1] #src 4->dst 4 (左上角 左下角 右上角 右下角) matSrc np.float32([[200,100],[200,400],[600,100],[wid…

数据驱动投资:AI在股票市场的应用

当ChatGPT首次亮相时&#xff0c;其卓越的语言处理能力立刻引起了许多行业的广泛关注&#xff0c;投资界也不例外。关于ChatGPT是否能应用于投资决策的问题&#xff0c;迅速成为热门讨论的焦点。 近期&#xff0c;加拿大多伦多大学和印度孟买理工学院的研究人员联合开展了一项…

Mysql:数据库和表增删查改基本语句

一、数据库操作 1&#xff09;、数据库创建 创建数据库本质就是创建一个目录&#xff08;ubuntu&#xff0c;创建的目录文件存放在/var/lib/mysql&#xff09;&#xff1b;后续创建表本质就是在该目录下创建文件&#xff08;不同存储引擎&#xff0c;会创建的文件数目是不同的…

Linux进程概念2

前言 1. Linux真实的调度算法 首先cpu中有一个叫做runqueue的东西&#xff0c;这个东西就是去弄进程的调度的&#xff0c;里面有很多东西&#xff0c;这里我们就写这些了 其中task_struct*这个数组指向的是140个元素&#xff0c;其中0~99就是系统默认的进程&#xff0c;后面的…