二分查找

思路

  1. 查询前的数组必须是有序的

  2. 需要三个指针

    一个指向要查询数组的最左边left,初始化为开始数组的最左边数的下标(length-1)

    一个指向要查询数组的最右边right,初始化为开始数组的最右边数的下标(0)

    一个中间指针min,其主要目的和要找的数对比,其值由左指针和右指针求(left+right)/2

  3. 若要找的值大于min,则left指向min右边一个位置向右递归该方法

    若要找的值小于min,则right指向min左边一个位置向左递归该方法

  4. 递归的结束条条件有两个

    ①要找的数不在该数组里,返回一个空列表

    ②若找到该数,不要马上返回

    向mid 索引值的左边扫描,将等于要找的数add到列表

    向mid 索引值的右边扫描,将等于要找的数add到列表

    当扫描前后的值不相等,或者扫描的下标超过数组,退出循环,返回该列表,递归结束

代码

public static List<Integer> binarySearch(int[] arr, int left, int right, int findVal) {// 当 left > right 时,说明递归整个数组,但是没有找到if (left > right) {return new ArrayList<Integer>();}int mid = (left + right) / 2;int midVal = arr[mid];if (findVal > midVal) { // 向 右递归return binarySearch2(arr, mid + 1, right, findVal);} else if (findVal < midVal) { // 向左递归return binarySearch2(arr, left, mid - 1, findVal);} else {List<Integer> resIndexlist = new ArrayList<Integer>();//向mid 索引值的左边扫描,int temp = mid - 1;while(true) {if (temp < 0 || arr[temp] != findVal) {//退出break;}//否则,就temp 放入到 resIndexlistresIndexlist.add(temp);temp -= 1; //temp左移}resIndexlist.add(mid);  ////向mid 索引值的右边扫描,将temp = mid + 1;while(true) {if (temp > arr.length - 1 || arr[temp] != findVal) {//退出break;}//否则,就temp 放入到 resIndexlistresIndexlist.add(temp);temp += 1; //temp右移}return resIndexlist;}

二分查找(java代码实现)相关推荐

  1. 二分查找 java代码实现

    文章目录 二分查找java代码 单元测试 二分查找java代码 package csdn.dreamzuora.query;/*** Title: 二分查找* Description:* 时间复杂度: ...

  2. 二分查找算法+代码(通俗易懂简洁扼要)

    知乎原文出处二分查找算法+代码(通俗易懂简洁扼要) - 知乎 欢迎关注我的知乎账号:进击的steve - 知乎 二分查找是一个可以把单值查找时间复杂度从O(n)降到O(logn)的算法. 二分查找的前 ...

  3. 二分查找算法代码详细理解

    前言 以前写了好多次的二分查找了,但对于一些细节感觉还是没有领悟道,比如while循环里面是否加上等号,mid是否要加一等等,每次写的时候虽然都过了,但总感觉是稀里糊涂的过的,这次特意来深度理解下二分 ...

  4. 算法图解第一章算法简介之二分查找C++代码实现

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列 这一块没什么好说的,书上讲的很清楚,这里默认 ...

  5. [LeetCode] Serch Insert Position (总结二分查找) Java version

    原题地址:https://oj.leetcode.com/problems/search-insert-position/: 查找插入口,在使用二分查找发的时候需要注意,与以前不同.在没有找到与tar ...

  6. 查找算法——二分查找【代码实现】

    伪代码 递归 // initially called with low = 0, high = N-1BinarySearch(A[0..N-1], value, low, high) {// inv ...

  7. 数据结构:二分查找 java

    为什么80%的码农都做不了架构师?>>>    二分查找的前提是有序存储,利用顺序存储和元素排序 /*** 二分查找,查找成功,返回下标记* @param values* @para ...

  8. LeetCode面试刷题技巧-二分查找算法代码思路解析

    二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使用过二分查找的思想,不信的话,且听我慢慢为你道来. 不知道你有没有玩过这样一个游戏,猜数字.就是说一个人心里想了 ...

  9. 二分算法php,使用PHP实现二分查找算法代码分享

    第一种方法: [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. [优缺点]折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难.因 ...

  10. 二分查找(Java实现)

    二分查找:递归实现 public class BinarySearch {/*** @param arr 代查找的数组,需要有序* @param left 查找区间的左界限* @param right ...

最新文章

  1. mysql触发器菜鸟_mysql触发器学习
  2. Intellij Idea 从 Svn 检出 Maven 项目、部署 Tomcat 运行
  3. C语言实现二叉树(附完整源码)
  4. 两则爵士鼓的基础练习
  5. 你对博客中提到的评分规则有何意见和建议?
  6. .net 解析Transfer-Encoding:chunked 秒掉网上无用方案
  7. eclipse-java-2019-12-R-win32-x86_64分享
  8. SQL With(递归 CTE 查询)
  9. vc安装.zip_空间分析:4-1.分词模型hanLP简介与安装
  10. linux数据库实例开机启动,Oracle数据库之Linux下实现Oracle数据库单实例开机自启动设置...
  11. mongodb 批量插入_MongoDB批量插入– MongoDB插入很多
  12. pycharm remote 远程项目 同步 本地_手把手教你Pycharm远程连接服务器端项目进行本地开发调试...
  13. 计算机的电子报表模板,Excel记账本
  14. 【SQL面试】求出各科成绩前三名的学生和成绩
  15. 网站建设需做的工作,你知道吗?
  16. linux usb有线网卡驱动_Linux USB网卡驱动安装
  17. 中国医疗废物处理行业竞争格局与发展决策建议报告2022-2027年
  18. 全网最详细elasticsearch7.10.2安装手册
  19. 计算机教学中扩词扩句的应用,【教学设计】学习扩写 ——部编人教版九下第一单元写作...
  20. 博图region用法_西门子1200PLC的OB块用法讲解

热门文章

  1. rstudio导入txt文件_r语言怎么读取txt文件
  2. python计算器外壳模板
  3. L298N电机驱动模块详解
  4. geoda权重矩阵导入matlab,geoda 导入空间权重矩阵怎么做
  5. SAP PK Oracle
  6. html跑马灯代码大全(图片文字移动代码)
  7. docker ssh连接
  8. 计算机房设计规范2008,GB50174-2008 电子计算机机房设计规范
  9. VBA一招解决宏病毒
  10. Thinkpad常见问题大全(转载联想工程师博客)