Java面试必备知识点梳理:二分查找算法
在计算机世界里“数据结构 算法=程序”,因此算法在程序开发中起着至关重要的作用。虽然我们在开发中自己设计算法的情况不多,在工作中却离不开算法。无论是开发包提供的算法还是我们自己设计的算法,算法在程序中都无处不在。
常用的算法有查找算法和排序算法。查找算法有线性查找算法、深度优先搜索算法、广度优先搜索算法和二分查找算法,而最常用也最快速的就是二分查找算法了。
二分查找算法又叫作折半查找,要求待查找的序列有序,每次查找都取中间位置的值与待查关键字进行比较,如果中间位置的值比待查关键字大,则在序列的左半部分继续执行该查找过程,如果中间位置的值比待查关键字小,则在序列的右半部分继续执行该查找过程,直到查找到关键字为止,否则在序列中没有待查关键字。
下图中,在有序数组[3,4,6,20,40,45,51,62,70,99,110] 中查找key=20的数据,根据二分查找算法,只需查找两次便能命中数据。
这里需要强调的是,二分查找算法要求要查找的集合是有序的,如果不是有序的集合,则先要通过排序算法排序后再进行查找。
二分查找算法的Java实现如下,代码定义了方法binarySearch()用于二分查找,在该方法中有3个变量low、mid和high,分别表示二分查找的最小、中间和最大的数据索引。
1 publicstatic int binarySearch(int []array,inta){2 intlow=0;3 inthigh=array.length-1;4 intmid;5 while(low<=high){6 mid=(low high)/2;//中间位置7 if(array[mid]==a){8 return mid;9 }else if(a>array[mid]){ //向右查找
10 low=mid 1;
11 }else{ //向左查找
12 high=mid-1;
13 }
14 }
15 return -1;
16 }
在以上代码中,通过一个while循环在数组中查找传入的数据,在该数据大于中间位置的数据时向右查找,即最大索引位置不变,将最小索引设置为上次循环的中间索引加1;在该数据小于中间位置的数据时向左查找,即最小索引位置不变,然后将最大索引设置为上次循环的中间索引并减1。重复以上过程,直到中间索引位置的数据等于要查找的数据,说明找到了要查找的数据,将该数据对应的索引返回。如果遍历到low>high还没有找到要查找的数据,则说明该数据在列表中不存在,返回-1。
面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。
针对这种情况,《Offer来了:Java面试核心知识点精讲(原理篇)》一书出版上市。本书在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。
面试在即,Java知识点很凌乱?别急,本书是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,除了原理讲解,还有Java实现!希望本书能够帮助你对Java的基础原理有更深入、全面的理解。
面试时的原理 动手实现脑海已就位,整装待发!互联网寒冬怕什么~
▉ 关于作者
王磊,现任国内某知名互联网公司大数据技术架构师,有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现有深刻的理解。长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计有丰富的实战经验。
▉ 大咖推荐
- 杨彪 / 美团高级架构师,《可伸缩服务架构》《分布式服务架构》作者
- 知秋(simviso) / Java编程方法论系列书籍作者
- 王新栋 / 京东资深架构师,《架构修炼之道》作者
▉ 章节架构
第1章 讲解JVM原理,涉及JVM运行机制、JVM内存模型、常用垃圾回收算法和JVM类加载机制等内容。
第2章 讲解Java基础知识,涉及集合、异常分类及处理、反射、注解、内部类、泛型和序列化等内容。
第3章 讲解Java并发编程知识,涉及Java多线程的工作原理及应用、Java线程池的工作原理及应用,以及锁、进程调度算法等内容。
第4章 讲解数据结构知识,涉及栈、队列、链表、散列表、二叉树、红黑树、图和位图等内容。
第5章 讲解Java中的常用算法,涉及二分查找、冒泡排序、插入排序、快速排序、希尔排序、归并排序、桶排序、基数排序等算法。
第6章 讲解网络与负载均衡原理,涉及TCP/IP、HTTP、常用负载均衡算法和LVS原理等内容。
第7章 讲解数据库及分布式事务原理,涉及数据库存储引擎、数据库并发操作和锁、数据库分布式事务等内容。
第8章 讲解分布式缓存的原理及应用,涉及分布式缓存介绍、Ehcache原理及应用、Redis原理及应用、分布式缓存设计的核心问题等内容。
第9章 讲解设计模式,涉及常见的23种经典设计模式。
了解本书详情
本文由博客一文多发平台 OpenWrite 发布!
Java面试必备知识点梳理:二分查找算法相关推荐
- LeetCode面试刷题技巧-二分查找算法代码思路解析
二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使用过二分查找的思想,不信的话,且听我慢慢为你道来. 不知道你有没有玩过这样一个游戏,猜数字.就是说一个人心里想了 ...
- LeetCode面试刷题技巧-二分查找算法(下):通过 LeetCode 学习二分查找算法-销售价值减少的颜色球
前言 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟! MATLAB-30天带你从入门到精通 MATLAB深入理解高级教程(附源码) tableau可视化数据 ...
- 二分查找算法java
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...
- java 二分查找_JAVA 实现二分查找算法。我知道你会,但没你想象的那么简单
二分查找算法定义:二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法.搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结 ...
- Java 二分查找算法及效率比较
1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值 ...
- 面试大厂不看这两份Java面试核心知识点原理篇+框架篇,有个屁用?食屎啦泥?
前言 面试在即,Java知识点很凌乱? 别急,有本套书在呢! 除了原理,还有框架! ★ 精细讲解JVM原理.Java基础.并发编程.数据结构和算法.网络与负载均衡 ★ 深入挖掘数据库与分布式事务.分布 ...
- 高级 Java 面试通关知识点整理
转载自 高级 Java 面试通关知识点整理 1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式: ...
- Java面试核心知识点(283页)Java面试题合集最新版(485页)
阿里.腾讯两大互联网企业传来裁员消息,很多人都陷入担心,不安情绪蔓延-- 其实大家应该更冷静和理性地看待大厂裁员.每年三四月都是大厂人员调整期,这个季节是各个公司战略调整.战略规划的一个关键期,肯定会 ...
- 二分查找算法的万能公式(LeetCode35、704、1095)
二分查找常常用于有序数组的查找操作.当然如果是一个问题,数组的顺序满足特定条件(不仅仅是升序或者降序,也可以是先升后降或先降后升),就可以通过逐步排查,缩小问题的规模的方式找到,这种算法也是二分查找算 ...
- 二分查找算法(递归与非递归两种方式)
首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...
最新文章
- 【怎样写代码】偷窥高手 -- 反射技术(六):深入窥视DLL内部
- RabbitMQ(四):RabbitMQ与Spring Boot简单整合 快速尝鲜版
- Spring 使用注解方式进行事务管理
- 有关手机屏幕的几个概念
- 如何使用反意疑问句来确认请求_24
- Mybatis.cfg配置标签的顺序问题
- 关于方法的重载和默认参数的一点小误区
- 孙鑫VC学习笔记:第十七讲 (二) 用匿名管道实现进程间的通信
- 【Java项目实战】黄金矿工小游戏项目介绍
- 计算机如何实现截长图功能,只会Ctrl+Alt+A?告诉你电脑截长图的5大方法
- 《计算机网络基础与应用》笔记
- 【高频电子线路】[模型]阻抗变换与阻抗匹配(第2章 谐振功率放大器)
- 3dmax 计算机中丢失,3dmax材质丢失怎么快速找回-解决3dmax材质不见了的方法 - 河东软件园...
- 【前端面试之缓存】js本地缓存、浏览器缓存、服务器缓存
- uni-app 小程序项目获取openid
- 用科学计算器求均值与方差(超详细)(概率论中使用)
- [0CTF 2016]piapiapia(反序列化逃逸)
- java证书cert_java – 使用带有证书路径(cert chain)的bouncy...
- Re:从0开始的微服务架构:(二)如何快速体验微服务架构?
- 用java实现简单绘图