news 2026/2/4 13:56:31

二分查找与搜索算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分查找与搜索算法

二分查找(binary search)是一种基于分治策略的高效搜索算法。它利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。

/* 二分查找(双闭区间) */intbinarySearch(int[]nums,inttarget){// 初始化双闭区间 [0, n-1] ,即 i, j 分别指向数组首元素、尾元素inti=0,j=nums.length-1;// 循环,当搜索区间为空时跳出(当 i > j 时为空)while(i<=j){intm=i+(j-i)/2;// 计算中点索引 mif(nums[m]<target)// 此情况说明 target 在区间 [m+1, j] 中i=m+1;elseif(nums[m]>target)// 此情况说明 target 在区间 [i, m-1] 中j=m-1;else// 找到目标元素,返回其索引returnm;}// 未找到目标元素,返回 -1return-1;}

在算法题中,我们常通过将线性查找替换为哈希查找来降低算法的时间复杂度。给定一个整数数组 nums 和一个目标元素 target ,请在数组中搜索“和”为 target 的两个元素,并返回它们的数组索引。返回任意一个解即可。这是算法第一题两数之和。
1,暴力枚举

/* 方法一:暴力枚举 */int[]twoSumBruteForce(int[]nums,inttarget){intsize=nums.length;// 两层循环,时间复杂度为 O(n^2)for(inti=0;i<size-1;i++){for(intj=i+1;j<size;j++){if(nums[i]+nums[j]==target)returnnewint[]{i,j};}}returnnewint[0];}

2,哈希查找,借助一个哈希表,键值对分别为数组元素和元素索引。循环遍历数组。

/* 方法二:辅助哈希表 */int[]twoSumHashTable(int[]nums,inttarget){intsize=nums.length;// 辅助哈希表,空间复杂度为 O(n)Map<Integer,Integer>dic=newHashMap<>();// 单层循环,时间复杂度为 O(n)for(inti=0;i<size;i++){if(dic.containsKey(target-nums[i])){returnnewint[]{dic.get(target-nums[i]),i};}dic.put(nums[i],i);}returnnewint[0];}

线性搜索适用于小型或频繁更新的数据;二分查找适用于大型、排序的数据;哈希查找适用于对查询效率要求较高且无须范围查询的数据;树查找适用于需要维护顺序和支持范围查询的大型动态数据。用哈希查找替换线性查找是一种常用的优化运行时间的策略,可降低时间复杂度。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 17:56:24

商业级图像合成引擎6.0版本重磅发布:解锁跨场景视觉创作新范式

在数字内容创作领域&#xff0c;图像合成技术正经历从基础拼接向专业级融合的跨越式发展。近日&#xff0c;备受行业关注的商业级图像合成引擎正式推出6.0版本&#xff0c;凭借七大核心功能与全场景覆盖能力&#xff0c;重新定义了视觉内容生产的效率与质量标准。该版本作为基础…

作者头像 李华
网站建设 2026/2/4 19:52:07

MyBatis-Plus与Spring整合(02--Service的代理)

文章目录 1、代码版本 2、代理实现过程 3、被代理的OrderService分析 3.1、结构如下 4、事务的管理 1、代码版本 springboot3.2.5, spring6.1.6, mybatis-plus3.5.5 业务代码 1个Controller 2个Service以及实现类 一个普通Service,一个MyBatis-Plus的Service @RestController…

作者头像 李华
网站建设 2026/2/4 19:51:59

11、渗透测试实战:目标探索、利用与攻击行动

渗透测试实战:目标探索、利用与攻击行动 在渗透测试的过程中,我们首先需要对目标环境进行探索和信息收集,之后再采取行动进行入侵和利用。以下将详细介绍相关的步骤和工具。 目标探索与信息收集 在完成前期的侦察和武器化阶段后,我们对目标环境有了一定的了解。此时,我…

作者头像 李华
网站建设 2026/2/4 19:52:02

16、攻击收尾:报告与撤离

攻击收尾:报告与撤离 1. ProxyChains测试 当我们挑选好代理并更新了 proxychains.conf 文件后,就可以进行测试。使用 ProxyChains 的语法如下: proxychains <command you want tunneled and proxied> <opt args>若要运行 nmap 扫描,可使用以下命令: r…

作者头像 李华
网站建设 2026/2/4 16:15:11

20、树莓派的替代项目探索

树莓派的替代项目探索 树莓派网络配置与Tor网络使用 首先,我们需要按以下方式编辑 /etc/tor/torrc 文件: Log notice file /var/log/tor_notices.log VirtualAddrNetwork 10.99.0.0/10 AutomapHostsSuffixes .onion,.exit AutomapHostsOnResolve 1 TransPort 9040 Tran…

作者头像 李华
网站建设 2026/2/4 21:13:26

事件查看器-事件ID

事件查看器-事件ID一、核心日志类别说明二、系统日志&#xff08;System&#xff09;常用事件ID&#xff08;重点&#xff09;1. 启动/关机相关2. 服务相关3. 驱动/硬件相关4. 系统更新/组件相关三、安全日志&#xff08;Security&#xff09;常用事件ID&#xff08;安全审计重…

作者头像 李华