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

算法——二分查找

介绍

二分查找是一个高效的查找算法,查找算法还有线性查找,它的时间复杂度为 O ( n ) O(n) O(n),但二分查找的时间复杂度为 l o g ( n ) log(n) log(n)(因为是2分,所以此处的log是以2为底的对数函数)。

注:本文提到的查找都是无重复元素的,要是有重复元素,就比较麻烦了。

线性查找

思想

从数组的头部向尾部遍历,如果找到就返回它的下标,如果遍历完还找不到就返回-1。

代码

class Solution {public int linearSearch(int[] nums, int target) {for (int i = 0; i < nums.length; i++) {if (nums[i] == target) {return i;}}return -1;}
}

二分查找

前提

数组是有序的,一般要求数组为升序排列,也就是从小到大排列。

思想

二分查找的核心思想就是分治就是将一个问题划分为多个子问题,就是将最小的子问题解决。比如说有一堆苹果,要想吃完这堆苹果(解决一个大问题),就得先将这堆苹果分成很多堆(将问题划分为子问题),直到每堆只剩一个苹果(划分到了最小的子问题),然后再一个一个地将苹果吃掉(将最小的子问题解决)。

现在理解二分查找,二分查找就是找到升序的数组的中间元素,然后比较中间元素与目标元素的大小,如果目标元素等于中间元素,则直接返回中间元素的下标;如果目标元素大于中间元素,就去右子区间查找;否则就去左子区间查找。直到找到目标元素无法再找为止(无法再找指的是区间的长度小于1)。注意,如果数组是降序的,则策略与此恰好相反。

由于二分查找每次都将待查找区间缩小为上一个待查找区间的一半,所以它的时间复杂度为 O ( l o g n ) O(logn) O(logn)

代码

class Solution {public int binarySearch(int[] nums, int target) {// nums一定要有序,如果没有序,就先使用Arrays.sort(nums);将nums按升序排列int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left >> 1);if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1;}
}

相关文章:

算法——二分查找

介绍 二分查找是一个高效的查找算法&#xff0c;查找算法还有线性查找&#xff0c;它的时间复杂度为 O ( n ) O(n) O(n)&#xff0c;但二分查找的时间复杂度为 l o g ( n ) log(n) log(n)&#xff08;因为是2分&#xff0c;所以此处的log是以2为底的对数函数&#xff09;。 注…...

统计信号处理基础 习题解答10-8

题目 一个随机变量具有PDF 。希望在没有任何可用数据的情况下估计的一个现实。为此提出了使最小的MMSE估计量&#xff0c;其中期望仅是对求的。证明MMSE估计量为。将你的结果应用到例10.1&#xff0c;当把数据考虑进去时&#xff0c;证明最小贝叶斯MSE是减少的。 解答 在贝叶…...

Flutter打包网络问题解决办法

问题情况":app:compileReleaseJavaWithJavac" 报错的最主要问题其实在下一句 Failed to find Build Tools revision 30.0.3,请查看自己的Android sdk版本,比如我的就是’34.0.0’版本. 解决办法: 在app/build.gradle中的android下添加,即可 buildToolsVersion 3…...

【ARM Cache 及 MMU 系列文章 6.3 -- ARMv8/v9 Cache Tag数据读取及分析】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cache Tag 数据读取测试代码Cache Tag 数据读取 在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管…...

Lua移植到标准ANSI C环境

本文目录 1、引言2、环境准备2.1 源码下载2.2 项目构建环境准备 3、项目编译3.1 添加main.c3.2 Kconfig选择模块3.3 项目构建3.4 项目编译 4、运行 文章对应视频教程&#xff1a; 在下方喔 ~~~ 欢迎关注 点击图片或链接访问我的B站主页~~~ lau解释器移植与功能验证 1、引言 本…...

crossover软件安装程序怎么安装 Crossover for Mac切换Windows系统 crossover软件怎么样

CrossOver Mac版是专为苹果电脑用户打造的一款实用工具&#xff0c;这款工具主要方便用户在Mac上运行windows系列的应用程序&#xff0c;用户不需要安装虚拟机就可以实现各种应用程序的直接应用&#xff0c;并且可以实现无缝集成&#xff0c;实现跨平台的复制粘贴和文件互通等&…...

【2024高考作文】新课标I卷-人工智能主题,用chatGPT作答

目录 &#x1f438;&#x1f438;作文真题 ⭐⭐1.chatGPT作答 ⭐⭐2.通义千问作答 ⭐⭐3.KiMi作答 整理不易&#xff0c;欢迎一键三连&#xff01;&#xff01;&#xff01; 送你们一条美丽的--分割线-- &#x1f438;&#x1f438;作文真题 随着互联网的普及、人工智能的…...

【计算机网络】P2 计算机网络体系结构基本概念,涉及分层的基本术语、SDU、PCI 与 PDU 的概念以及层次结构的含义

目录 概述分层的基本元组基本术语SDU、PCI 以及 PDU层次结构含义 概述 在两个系统中实体间的通信是一个很复杂的过程。而为了降低协议设计以及调试过程的复杂性&#xff0c;同时便于对网络进行研究、实现和维护&#xff0c;促进标准化工作&#xff0c;通常对计算机网络的体系结…...

主流物联网协议客户端开源库介绍(mqtt,coap,websocket,httphttps,tcp及udp)

一.概述 本文主要介绍主流物联网协议&#xff08;mqtt&#xff0c;coap&#xff0c;websocket&#xff0c;http/https&#xff0c;tcp/udp&#xff09;客户端c/c开源库&#xff0c;并对其特点进行对比分析。 二.各个库具体介绍 1.MQTT &#xff08;1&#xff09;常见的c/c客户…...

【Python】成功解决SyntaxError: invalid syntax

【Python】成功解决SyntaxError: invalid syntax 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&am…...

源代码防泄密

深信达SDC沙盒数据防泄密系统&#xff0c;是专门针对敏感 数据防泄密的保护系统&#xff0c;尤其是对研发型企业数据 防泄密保护。实现对数据的代码级保护&#xff0c;且不影响 工作效率&#xff0c;不影响正常使用。所有敏感数据都自动 加密并配合多种管控机制&#xff0c;从而…...

Unity DOTS技术(十三) ComponentSystem及JobComponentSystem

文章目录 一.ComponentSystem介绍二.JobComponentSystem 一.ComponentSystem介绍 1.继承ComponentSystem需要实现抽象OnUpdate() 2.与SystemBase不同,ComponentSystem不包含LambdaSingleJobDescription, 3.CompoentSystem的带代码都是在主线程上运行,不支持多线程. 4.并不能在…...

Apifox的使用

1、了解Apifox的工具特点和使用方法 2、使用Apifox辅助生成接口文档&#xff0c;尝试使用Apifox进行其他前后端调试。 Apifox IDEA 插件快速上手 | Apifox 帮助文档 Apifox IDEA 插件来啦&#xff01;是真的超好用&#xff01;_哔哩哔哩_bilibili 21分钟学会Apifox_哔哩哔哩…...

【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;死信队列 RabbitMQ的工作模式 死信队列的工作模式 二、&#x1f349;RabbitMQ相关的安装 三、&#x1f34e;SpringBoot引入RabbitMQ 1.引入依赖 2.创建队列和交换器 2.1 变量声明 2.2 创建…...

kafka消息积压处理方案

背景&#xff1a; 某值班的一天&#xff0c;生产出现消息积压问题&#xff0c;对此类的问题做出快速应对方案来避免同类型问题&#xff0c;防止影响范围进一步的扩大。 出现消费积压后如何处理&#xff1a; 首先优先处理消息积压&#xff0c;如果代码逻辑问题&#xff0c;立…...

【vscode-快捷键 一键JSON格式化】

网上有很多JSON格式化工具&#xff0c;也有很多好用的在线json格式化工具。但是其实Vscode里面的可以直接格式化JSON&#xff0c;这里分享一个我常用的小插件 Prettify JSON 未格式化的JSON数据 召唤出命令行&#xff0c;输入prettify JSON 即可! ✿✿ヽ(▽)ノ✿...

什么是 Spring Boot 的起步依赖和自动配置?它们的作用是什么?

Spring Boot 的起步依赖和自动配置是 Spring Boot 框架的两个核心特性&#xff0c;它们的作用主要是简化了 Spring Boot 项目的搭建和配置过程。 起步依赖&#xff08;Starter Dependencies&#xff09;&#xff1a;起步依赖是一种预先定义好的依赖关系集合&#xff0c;它包含…...

rk3568 norflash+pcei nvme 配置

文章目录 rk3568 norflashpcei nvme 配置1&#xff0c;添加parameter_nor.txt文件2 修改编译规则3 修改uboot4 修改BoardConfig.mk5 修改kernel pcei配置6 编译7 烧录 rk3568 norflashpcei nvme 配置 1&#xff0c;添加parameter_nor.txt文件 device/rockchip/rk356x/rk3568_…...

【Vue】面经基础版-首页请求渲染

步骤分析 1.安装axios 2.看接口文档&#xff0c;确认请求方式&#xff0c;请求地址&#xff0c;请求参数 3.created中发送请求&#xff0c;获取数据&#xff0c;存储到data中 4.页面动态渲染 代码实现 1.安装axios yarn add axios npm i axios 2.接口文档 请求地址: …...

OBS+nginx+nginx-http-flv-module实现阿里云的推流和拉流

背景&#xff1a;需要将球机视频推送到阿里云nginx&#xff0c;使用网页和移动端进行播放&#xff0c;以前视频格式为RTMP&#xff0c;但是在网页上面播放RTMP格式需要安装flash插件&#xff0c;chrome浏览器不给安装&#xff0c;调研后发现可以使用nginx的模块nginx-http-flv-…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...