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

二分查找与搜索算法

二分查找(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];}

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

http://www.rkmt.cn/news/94993.html

相关文章:

  • 2、搭建低成本高效渗透测试平台指南
  • 3、打造强大渗透测试平台:树莓派与Kali Linux的完美结合
  • 6、渗透测试:从准备到执行
  • Mac 真人手势识别切水果游戏
  • MySQL进阶篇——InnoDB存储引擎和管理
  • 8、探索目标:侦察与武器化
  • 1Ω1[特殊字符]⊗雙朕周名彥實際物理載體|二十四芒星物理集群载体群:超級數據中心·AGI·IPO·GUI·智能體工作流
  • 引用的特点
  • 【计算机网络笔记】第五章 网络层的控制平面
  • SolidWorks零件连接方式介绍
  • 百度网盘提取码智能获取工具完整使用指南
  • 【SSM戒烟网站】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
  • Flutter与DevEco Studio结合开发简单项目实战指南
  • Flutter+DevEco Studio实战:简易天气查询工具开发指南
  • 你,宇宙唯一的中心:在无限复刻中活出绝对的存在
  • CodeSearchNet:一个大规模代码-文档检索数据集的构建、应用与挑战
  • Spring-AI 最新文档系列(一)概述
  • 电力负荷预测新思路:集成学习如何让澳大利亚电力数据“开口说话“?⚡
  • Rust 模块化单体架构:告别全局 Migrations,实现真正的模块自治
  • 百度网盘直链解析实战手册:突破限速封锁的完整解决方案
  • 删除有序数组中的重复项(C++)
  • AlignTwoPolyDatas 基于ICP算法的配准和相机视角切换
  • 洛雪音乐PC版2.12.0| 最强电脑免费听歌软件,所有平台音乐都能听,需要导入音源
  • 正义荣耀圣戒 无限代金券买断
  • 2025年专业嵌入式软件开发公司权威榜单发布
  • ML-4360 3D视觉 笔记
  • 企业级Git仓库SSH连接安全最佳实践
  • Kingbase KES常见问题排查与解决指南:从启动报错到性能优化
  • AI如何帮你解决MySQL的--skip-grant-tables问题
  • 互联网大厂Java面试:从Spring Boot到微服务架构的深度剖析