算法——二分查找
介绍
二分查找是一个高效的查找算法,查找算法还有线性查找,它的时间复杂度为 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;}
}
相关文章:
算法——二分查找
介绍 二分查找是一个高效的查找算法,查找算法还有线性查找,它的时间复杂度为 O ( n ) O(n) O(n),但二分查找的时间复杂度为 l o g ( n ) log(n) log(n)(因为是2分,所以此处的log是以2为底的对数函数)。 注…...
统计信号处理基础 习题解答10-8
题目 一个随机变量具有PDF 。希望在没有任何可用数据的情况下估计的一个现实。为此提出了使最小的MMSE估计量,其中期望仅是对求的。证明MMSE估计量为。将你的结果应用到例10.1,当把数据考虑进去时,证明最小贝叶斯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、运行 文章对应视频教程: 在下方喔 ~~~ 欢迎关注 点击图片或链接访问我的B站主页~~~ lau解释器移植与功能验证 1、引言 本…...
crossover软件安装程序怎么安装 Crossover for Mac切换Windows系统 crossover软件怎么样
CrossOver Mac版是专为苹果电脑用户打造的一款实用工具,这款工具主要方便用户在Mac上运行windows系列的应用程序,用户不需要安装虚拟机就可以实现各种应用程序的直接应用,并且可以实现无缝集成,实现跨平台的复制粘贴和文件互通等&…...
【2024高考作文】新课标I卷-人工智能主题,用chatGPT作答
目录 🐸🐸作文真题 ⭐⭐1.chatGPT作答 ⭐⭐2.通义千问作答 ⭐⭐3.KiMi作答 整理不易,欢迎一键三连!!! 送你们一条美丽的--分割线-- 🐸🐸作文真题 随着互联网的普及、人工智能的…...
【计算机网络】P2 计算机网络体系结构基本概念,涉及分层的基本术语、SDU、PCI 与 PDU 的概念以及层次结构的含义
目录 概述分层的基本元组基本术语SDU、PCI 以及 PDU层次结构含义 概述 在两个系统中实体间的通信是一个很复杂的过程。而为了降低协议设计以及调试过程的复杂性,同时便于对网络进行研究、实现和维护,促进标准化工作,通常对计算机网络的体系结…...
主流物联网协议客户端开源库介绍(mqtt,coap,websocket,httphttps,tcp及udp)
一.概述 本文主要介绍主流物联网协议(mqtt,coap,websocket,http/https,tcp/udp)客户端c/c开源库,并对其特点进行对比分析。 二.各个库具体介绍 1.MQTT (1)常见的c/c客户…...
【Python】成功解决SyntaxError: invalid syntax
【Python】成功解决SyntaxError: invalid syntax 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&am…...
源代码防泄密
深信达SDC沙盒数据防泄密系统,是专门针对敏感 数据防泄密的保护系统,尤其是对研发型企业数据 防泄密保护。实现对数据的代码级保护,且不影响 工作效率,不影响正常使用。所有敏感数据都自动 加密并配合多种管控机制,从而…...
Unity DOTS技术(十三) ComponentSystem及JobComponentSystem
文章目录 一.ComponentSystem介绍二.JobComponentSystem 一.ComponentSystem介绍 1.继承ComponentSystem需要实现抽象OnUpdate() 2.与SystemBase不同,ComponentSystem不包含LambdaSingleJobDescription, 3.CompoentSystem的带代码都是在主线程上运行,不支持多线程. 4.并不能在…...
Apifox的使用
1、了解Apifox的工具特点和使用方法 2、使用Apifox辅助生成接口文档,尝试使用Apifox进行其他前后端调试。 Apifox IDEA 插件快速上手 | Apifox 帮助文档 Apifox IDEA 插件来啦!是真的超好用!_哔哩哔哩_bilibili 21分钟学会Apifox_哔哩哔哩…...
【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列
📝个人主页:哈__ 期待您的关注 目录 一、🔥死信队列 RabbitMQ的工作模式 死信队列的工作模式 二、🍉RabbitMQ相关的安装 三、🍎SpringBoot引入RabbitMQ 1.引入依赖 2.创建队列和交换器 2.1 变量声明 2.2 创建…...
kafka消息积压处理方案
背景: 某值班的一天,生产出现消息积压问题,对此类的问题做出快速应对方案来避免同类型问题,防止影响范围进一步的扩大。 出现消费积压后如何处理: 首先优先处理消息积压,如果代码逻辑问题,立…...
【vscode-快捷键 一键JSON格式化】
网上有很多JSON格式化工具,也有很多好用的在线json格式化工具。但是其实Vscode里面的可以直接格式化JSON,这里分享一个我常用的小插件 Prettify JSON 未格式化的JSON数据 召唤出命令行,输入prettify JSON 即可! ✿✿ヽ(▽)ノ✿...
什么是 Spring Boot 的起步依赖和自动配置?它们的作用是什么?
Spring Boot 的起步依赖和自动配置是 Spring Boot 框架的两个核心特性,它们的作用主要是简化了 Spring Boot 项目的搭建和配置过程。 起步依赖(Starter Dependencies):起步依赖是一种预先定义好的依赖关系集合,它包含…...
rk3568 norflash+pcei nvme 配置
文章目录 rk3568 norflashpcei nvme 配置1,添加parameter_nor.txt文件2 修改编译规则3 修改uboot4 修改BoardConfig.mk5 修改kernel pcei配置6 编译7 烧录 rk3568 norflashpcei nvme 配置 1,添加parameter_nor.txt文件 device/rockchip/rk356x/rk3568_…...
【Vue】面经基础版-首页请求渲染
步骤分析 1.安装axios 2.看接口文档,确认请求方式,请求地址,请求参数 3.created中发送请求,获取数据,存储到data中 4.页面动态渲染 代码实现 1.安装axios yarn add axios npm i axios 2.接口文档 请求地址: …...
OBS+nginx+nginx-http-flv-module实现阿里云的推流和拉流
背景:需要将球机视频推送到阿里云nginx,使用网页和移动端进行播放,以前视频格式为RTMP,但是在网页上面播放RTMP格式需要安装flash插件,chrome浏览器不给安装,调研后发现可以使用nginx的模块nginx-http-flv-…...
ch1计算机网络和因特网
*1.1 什么是因特网 因特网是一个世界范围的计算机网络,即一个互联了遍及全世界的数十亿计算设备的网络。 具体构成: 主机hosts或端系统end-systems:数以亿计的计算设备互连,例如 主机-PCs(计算机), workstations(工作站), servers(服务器)端系统-PDAs,phones(…...
Web前端安全测试:深入剖析与实战策略
Web前端安全测试:深入剖析与实战策略 在数字化时代,Web前端作为用户与互联网服务交互的直接窗口,其安全性至关重要。然而,随着技术的不断进步,前端安全面临的威胁也日益复杂和多样化。因此,进行Web前端安全…...
Java学习-JDBC(一)
JDBC 概念 JDBC(Java Database Connectivity)Java数据库连接JDBC提供了一组独立于任何数据库管理系统的APIJava提供接口规范,由各个数据库厂商提供接口的实现,厂商提供的实现类封装成jar文件,也就是我们俗称的数据库驱动jar包JDBC充分体现了…...
异步复位和同步释放
文章目录 前言一、为什么需要复位呢?二、同步复位1. 同步复位定义2. 同步复位的实现3. 同步复位的优点和缺点同步复位优点同步复位缺点 三、异步复位1. 异步复位定义2. 异步复位的实现3. 异步复位的优点和缺点异步复位优点异步复位缺点 四、异步复位同步释放1. reco…...
03-3.2.4 双端队列
👋 Hi, I’m Beast Cheng👀 I’m interested in photography, hiking, landscape…🌱 I’m currently learning python, javascript, kotlin…📫 How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…...
SpringBoot的Mapper文件什么时候需要使用@Param注解
解决:nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found 关于加注解,其他博客说的很清楚!但是有的人会遇见明明使用的springboot2.x以上版本,仍然提示需要加注解!这是为…...
2024.6.8
2024.6.8 **每日一题** 3040.相同分数的最大操作数目 Ⅱ,通多题意可知,该题最多有三种操作分数,分别是前两个,最后两个,以及第一个和最后一个的和。从这里也可以看出一共有三种状态转移方式,所以我们可以利…...
室内外融合定位是如何做到成为定位领域的新宠
在信息化高速发展的今天,定位技术已成为人们生活和工作中不可或缺的一部分。随着物联网、智慧城市等领域的蓬勃发展,传统的单一定位方式已无法满足复杂多变的环境需求。在这样的背景下,室内外融合定位技术应运而生,以其独特的优势…...
【刷题篇】分治-归并排序
文章目录 1、排序数组2、交易逆序对的总数3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 给你一个整数数组 nums,请你将该数组升序排列。 class Solution { public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){…...
【经验】Ubuntu上离线安装VsCode插件浏览Linux kernel源码
1、下载VsCode离线安装包 1.1 下载 下载地址:https://marketplace.visualstudio.com/vscode 本人安装的插件: C/C++ checkpatch Chinese clangd kconfig Makefile Tools Perl Perl Toolbox注意:C/C++插件要安装Linux 64版本 1.2 安装 将离线安装包拷贝到Ubuntu中,执…...
九歌人工智能诗歌写作网站/网络推广渠道和方式
看到一篇对单例描述很不错的文章,地址:https://www.2cto.com/kf/201704/631396.html 单例设计模式总结 单例模式简介 单例模式是应用最广泛的模式之一,在应用这个模式时,单例对象的类必须确保只有一个实例存在,避免产…...
国外购物网站推荐/深圳百度关键词
实验结论 如果需要在循环结束后获得结果,推荐列表解析; 如果不需要结果,直接使用for循环, 列表解析可以备选; 除了追求代码优雅和特定规定情境,不建议使用map 如果不需要返回结果 这里有三个process, 每个任务将通过增加循环提高时…...
电商网站类型/百度seo快速见效方法
1:基于相同IP不同Port的虚拟主机vim /etc/httpd/conf/httpd.conf更改Listen字段(此设置表示使用80以及8888端口)更改虚拟主机部分为:保存以上设置创建目录以及页面文件:(注:在/etc/httpd/conf/httpd.conf 中有DirectoryIndex inde…...
北京视频网站建设/西安网站推广排名
一、打开SecureCRT,打开会话,使用 yum -y install mariadb mariadb-server 命令安装 二、等待安装完毕,显示Complete!,表示安装完毕 三、启动MariaDB服务 service mariadb start 四、设置开机自启动 systemctl enable mariadb 五、…...
网站建设与规划/软文写作的十大技巧
文章目录参考资料1. 线性回归1.1 概述应用举例1.2 分析1.3 对数线性回归1.4 过拟合、欠拟合如何解决L2正则化(岭回归)L1正则化(Lasso回归)ElasticNet回归1.5 线性回归要求因变量服从正态分布?2. 对数几率回归(logistic 回归)2.1 概述2.2 优点2.3 求解2.4…...