经典算法之二分查找 (Java实现,包含多道经典算法题解)

双语言刷题仓库实战:Java/Python题解组织与毕设算法模块改造 在算法学习与工程实践中,双语言题解仓库通过结构化组织提升代码复用效率。其原理在于按题目编号建立独立目录,每道题提供Java和Python双实现及说明文档,便于对照理解语言差异。这种组织方式的技术价值在于降低多语言环境下的学习与迁移成本,尤其适用于毕设开题、课程设计等需要快速搭建算法原型的场景。常见应用包括二分查找、动态规划等经典题型,通过本地环境配置与批量验证脚本确保代码可运行。自然收敛到lintcode题解仓库的实战改造,从刷题积累到可交付算法模块的完整路径。 阅读详情

二分查找

二分查找,是一种运用在静态数组中查找方法;总所周知,假设一长度为n的数组,若要从头遍历在其中查找目标值(target),平均时间复杂度为O(n),而二分查找的平均时间复杂度为O(logn),若在n很短的情况,差距确实可以忽略不计,但若n的长度为几千上万,则差距巨大,这也是算法是意义。
二分查找,是运用在排序数组中查找目标值的一种算法。数组已排序为该算法的必要条件。

实战演练

排序数组找出目标值

这是一道经典二分查找题,已知排序数组,找出target坐标,若不存在返回-1

    public static int search(int[] nums,int target){
        int l =0;// 左指针坐标 指向数组第一个元素
        int r = nums.length-1;//右指针坐标 指向数组最后一个元素
        int mid; //中间值坐标
        //注意 这个等于很关键,
        //如果是l<r则会过滤掉最后一个当l和r相等时的那个坐标
        //多说一句 这个l<r或l<=r 和下面的r = mid-1 、l=mid+1 是互相影响的
        //因为当r = mid而非mid-1 或者l=mid 而非mid+1;会出现不同结果
        //当然 这些其实并不需要太细致的去了解,因为二分查找的目的就是遍历到
        //数组中的每一个元素!!
        while (l<=r){//结束条件是左指针小于等于右指针 
        // l+(r-l)/2 等价于 (l+r)/2  那为什么不直接写 (l+r)/2呢
        // 因为两个int值相加时,可能会出现越界的情况,所以换一种写法
            mid = l+(r-l)/2;
            if(nums[mid]==target){
                return mid;//中间值等于目标值直接返回
            }else if(nums[mid]>target){
   //中间值大于目标值,则说明目标值必定出现在当前中间值的左侧,
  //注意 此地是r=mid-1 而非r=mid 我们上面已经做过判断了,mus[mid]==target
  // 说明mid坐标这个值必然不是target,而我们的循环条件while(l<=r) 使用的是<=
  //也就意味着假设一直做l++操作到最后一次循环,l和r相同,mid也就是等于r,
  //如果此r等于刚刚已经判断过的mid 则会重复判断,所以r=mid-1即可
                r = mid-1;
            }else if(nums[mid]<target){
   //与r = mid-1 同理 ,mid坐标值小于目标值 ,目标值必然不会出现mid左侧
                l  =mid+1;
            }
        }

        return -1;
    }

    public static void main(String[] args) {

        int[] num = {1,2,3,4,5,6,7,8,9};

        System.out.println(search(num, 7));
    }

}

java算法之二分查找法的实例详解 主要介绍了java算法之二分查找法的实例详解的相关资料,这里提供简单实例帮助大家学习理解这部分内容,需要的朋友可以参考下 立即下载

相关推荐

Java实现的两种常见简单查找算法示例【快速查找与二分查找】

主要介绍了Java实现的两种常见简单查找算法,结合具体实例形式分析了java快速查找与二分查找的原理与简单实现技巧,需要的朋友可以参考下

【Java】二分搜索系列学习+例题

java二分搜索系列例题刷题总结

rellvera的博客 985

华为路由器 VRRP主备配置

3、R3 出口路由器。

一直被模仿,从未被超越 5584

二分查找_java实现

二分查找 经过尚硅谷韩顺平老师的视频讲解 总结下来的笔记 有序数组!!! 二分查找: 请对一个有序数组进行二分查找{1,8,10,89,1000,1234]},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数”。 二分查找的思路分析Ⅰ 1.首先确定该数组的中间的下标mid= (left+right) / 2 2.然后让需要查找的数findval和arr[mid]比较 ---- findval > arr[mid],说明你要查找的数在mid的右边,因此需要递归的向右查找 -

zhangan_的博客 360

TikTok达人私信自动化:用Node.js和纯JavaScript实现WSS协议通信(附完整代码结构)

本文详细介绍了如何使用Node.js和WSS协议实现TikTok达人私信自动化系统。通过分层架构设计、WSS连接管理、消息加密策略及频率控制,开发者可以构建稳定高效的私信工具,突破平台API限制,适用于跨境电商和社交媒体运营场景。

weixin_30352645的博客 519

Mac新手必看:为什么你的终端找不到Python命令?5分钟搞定zsh报错

本文针对Mac用户在终端遇到“zsh: command not found: python”报错的问题,提供了深度解析与实战修复指南。文章解释了macOS系统因历史原因默认使用`python3`而非`python`命令,并详细介绍了四种解决方案:养成使用`python3`的习惯、创建别名、通过Homebrew安装链接以及修改PATH环境变量,帮助新手快速解决zsh报错,顺利开始Python开发。

weixin_29248653的博客 594

java二分法查找示例

【代码】java二分法查找示例。

weixin_45811735的博客 388

抖音短视频数据抓取实战系列(一)——模拟器性能对比与优化配置

本文是抖音短视频数据抓取实战系列的开篇,重点探讨了模拟器选型与优化配置。通过对比雷电、夜神、逍遥三大主流模拟器在性能、抖音兼容性及抓包友好度上的表现,文章指出雷电模拟器因其稳定的桥接网络模式和良好的兼容性,是数据抓取的优选。并提供了雷电模拟器从安装、网络桥接到系统优化的详细配置指南,旨在帮助读者构建稳定高效的抓取环境。

weixin_29230901的博客 245

Java中的二分查找

这道题应该是最常见的有关二分查找的例题,其中比较重要的点就是:1、静态方法怎么调用非静态方法,代码中的注释也出了答案。这段代码通过遍历二维数组的每一行,并在每一行中使用二分查找来高效地查找目标值。由此可见使用无符号右移运算符“>>>”,即使发生了类型溢出也不影响后续结果的正确与否。通过选择合适的起始点和移动方向,可以确保不会错过任何可能的区域,同时避免不必要的搜索。选择起始点:可以从左下角或右上角开始,因为这两个位置可以同时利用行和列的有序性。关于上面的代码还有另一种写法,并返回目标值的下标。

优快云_xysf的博客 975

数学建模常用模型10 :数据包络(DEA)分析法(投入产出法)

数据包络分析是评价多输入指标和多输出指标的较为有效的方法,将投入与产出进行比较。它的结果包含的意思有: ①θ=1,DEA有效,表示投入与产出比达到最优 ②θ&lt;1,非DEA有效,表示投入与产出比没有达到最优,一般来说,θ越大说明效果越好。 数据包络分析是通过对投入的指标和产出的指标做了一个线性规划,并且进行变换后,然后根据其线性规划的对偶问题(线性规划对偶问题具有经济学意义),求解这个对...

HaLosec_Wei 9万+

【LAMMPS学习】八、基础知识(4.5)TIP5P水模型

​ 五点 TIP5P 刚性水模型通过添加两个通常无质量的附加位点 L 来扩展three-point TIP3P model,其中放置与氧原子相关的电荷。这些位点 L 位于距氧原子固定距离处,形成从 HOH 平面旋转 90 度的四面角。因此,这些位点在某种程度上近似于氧的孤对,从而改善了水结构,与four-point TIP4P model相比变得更加“四面体”。

荷塘阅色 1421

LeetCode --- 经典算法题之二分查找三回合

LeetCode经典算法题之二分查找 手撕算法~

wanghuichen的博客 1227

Python爬虫抓取淘宝商品详情页信息:从入门到高级技术应用

通过本篇博客,我们了解了如何使用Python爬虫抓取淘宝商品详情页的信息,如何使用requests和Selenium抓取静态和动态内容,如何应对淘宝的反爬虫机制,如何将抓取的数据保存到CSV文件等。随着爬虫技术的不断发展,开发者可以根据需要选择合适的工具和技术,如使用分布式爬虫框架提高抓取效率,或者利用OCR技术处理验证码等问题。在进行淘宝爬虫时,需要注意遵循相关法律法规和平台的爬虫政策,避免对平台造成过度的负担或侵犯其合法权益。

2201_76125261的博客 460

doocs/leetcode Java题解精要

doocs/leetcode 是一个开源的 LeetCode 题解项目,提供多种编程语言的解决方案。该项目包含了数千道 LeetCode 题目的高质量解答,覆盖了从简单到困难的各种难度级别。Java 作为最常用的编程语言之一,在该项目中占据了重要地位。 ## 项目结构解析 ### 目录组织 doocs/leetcode 采用按题目编号分组的目录结构: ``` solution/ ├── 0...

gitblog_00555的博客 910

【Bluedroid】AVRCP 连接源码分析(一)

AVRCP连接源码分析流程是一个涉及多个步骤和协议交互的复杂过程。在源码中,需要仔细处理各种连接状态和协议交互,以确保AVRCP连接的稳定性和可靠性。同时,还需要根据具体的应用场景和需求,对AVRCP命令和响应进行定制化处理。

byte轻骑兵的技术小窝 3315

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

2024年Java最新LeetCode --- 经典算法题之二分查找三回合,Java常用算法手册

既已说到spring cloud alibaba,那对于整个微服务架构,如果想要进一步地向上提升自己,到底应该掌握哪些核心技能呢?就个人而言,对于整个微服务架构,像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等这些都是最最核心的知识,架构师必经之路!下图,是自绘的微服务架构路线体系大纲,如果有还不知道自己该掌握些啥技术的朋友,可根据小编手绘的大纲进行一个参考。

2401_84584324的博客 1028

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

10大经典算法题解与面试实战技巧

算法作为计算机科学的核心基础,通过分治、动态规划等思想解决复杂问题。快速排序和二分查找展示了如何用O(nlogn)和O(logn)时间复杂度高效处理数据,而背包问题则体现了动态规划的空间优化技巧。在工程实践中,哈希表优化能将两数之和问题从O(n²)降至O(n),斐波那契数列的迭代解法实现了O(1)空间复杂度。这些算法在面试题库和实际项目中广泛应用,如推荐系统的协同过滤、游戏开发的A*寻路等场景。本文通过LeetCode高频真题,详解时间复杂度分析和多语言实现,帮助开发者掌握算法优化方法与面试解题框架。

weixin_32306957的博客 315

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

终极LeetCode算法指南:151道经典题解完整汇总,助你轻松攻克数论难题

GitHub加速计划/leet/leetcode项目是一个全面的LeetCode题解资源库,包含151道完整题解,特别聚焦于数论算法领域。无论你是编程新手还是有一定经验的开发者,这个项目都能为你提供清晰易懂的解题思路和方法,帮助你快速提升算法能力。 ## 📚 项目核心内容概览 该项目主要分为C++和Java两个版本的题解,其中C++版本包含了丰富的图文解析和算法实现。项目结构清晰,便于用户查

gitblog_01078的博客 458

截止到 2019 年 6 月 14 日在 LeetCode 中文版上写的题解

编号 题目地址 题解 有图解 阅读过百 精选题解 其它 1 LeetCode 第 287 题:寻找重复数 桶排序 + 二分法(Python 代码、Java 代码) 是 是 2 LeetCode 第 452 题:用最少数量的箭引爆气球 贪心算法(Python 代码、Java 代码) 是 是 3 LeetCode 第 300 题:最长上升子序列 动态规划 + 贪心算法(...

李威威的博客 690

傻瓜版leetcode hot100 简单题20道(含python/java/golang/c/c++题解)

的输入如下(你设计的程序。

2202_75353059的博客 654

经典算法大全51例——4.三色旗

经典算法大全51例——4.三色旗算法目录合集地址说明题目原理分析思路一——纵向寻踪思路二——横向寻踪代码实现——Java方式一——纵向寻踪方式二——横向寻踪相关题目其他变形:1.杨辉三角(来源:力扣LeetCode)2.弹球问题3.路径问题官方题解代码——C语言拓展杨辉三角与斐波那契数列杨辉三角与等差数列 算法目录合集 地址    算法目录合集 说明   该地址指向所有由本人自己所经历的算法习题(也有可能仅仅是一个入门的案例或者是经典案例),仅仅为我做过而且比较有意思的,也许还会有一些我自己想出来的,出于兴

g55zhw93的博客 3109

25道经典Java算法题

即使做web开发,也会遇到各种各种需要解决的算法问题,本文节选部分经典练手算法,并提供相关参考答案,希望对你有所帮助【程序1】题目:古典问题:有一对兔子,从出生后第3个月...

java面试笔试 394

[剑指Offer] - Java完整题解

写在前面 本文题目顺序为牛客网剑指 Offer 通过率降序,也算是一种从易到难。 牛客网剑指Offer 详细题解 剑指Offer 具体题解发布在个人网站,更新ing 1. 二维数组中的查找 2. 替换空格 3. 从尾到头打印链表 4. 两个栈实现队列 5. 旋转数组的最小数字 6. 斐波那契数列 7. 跳台阶 8. 变态跳台阶 9.二叉树深度 10.不使用加减乘除做加法 11. 镜像二叉树...

liyifan687的博客 833

3道真题训练|学会链表的前世今生

Java基础学习主要以练习为主,很多朋友听完视频课程学会基础以后感觉对练手项目无从下手,这里推荐去牛客网看看,这里的IT题库内容很丰富,属于国内做的很好的IT学习网站,而且是课程+刷题+面经+求职+讨论区分享。从基础开始练习,知识点编排详细,题目安排合理,题目表述以指导的形式进行。整个题单覆盖了java入门的全部知识点以及全部语法,通过知识点分类逐层递进,从基础开始到最后的实践任务,都会非常详细地指导你应该使用什么函数,应该怎么输入输出。

zhangxia_的博客 982
上一篇: Java数据结构之二叉树及其源码实现
下一篇: RabbitMQ及工作模式详解,包含docker部署
一个没有梦想的程序员
博客等级 码龄7年 20粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值