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

[算法] 二分查找

package com.guigu.search;import java.util.ArrayList;
import java.util.Arrays;/*** @author: guorui fu* @versiion: 1.0* 二分查找 直接适用于已经排序完成的数组*/
public class BinarySearch {public static void main(String[] args) {int arr[] = {1,8,8,89,101,1234};ArrayList<Integer> resIndex = binarySearch(arr, 0, arr.length, 8);if (resIndex.isEmpty()){System.out.println("找不到目标值");}else{System.out.println("所找值下标=" + resIndex);}}//二分查找算法/**** @param arr 数组* @param left 左边的索引* @param right 右边的索引* @param findVal 要查找的值* @return 返回下标 或返回-1*/public static ArrayList<Integer> binarySearch(int[] arr,int left,int right,int findVal){//如果left > right 则说明找不到 返回-1if (left > right){return new ArrayList<Integer>();}int mid = (left + right)/2;int midVal = arr[mid];if (findVal > midVal){//向右递归return binarySearch(arr, mid + 1, right, findVal);}else if (findVal < midVal){//向左递归return binarySearch(arr,left,mid - 1,findVal);}else {//找到mid索引值,不要马上返回 加入集合 继续扫描ArrayList<Integer> resIndexList = new ArrayList<>();int temp = mid -1;while (true){if (temp < 0 || arr[temp] != findVal){//退出break;}//否则,就temp放入到集合中resIndexList.add(temp);temp -= 1;//temp左移}resIndexList.add(mid);//向mid索引值的右边扫描,将所有满足1000 的元素的下标,加入到集合ArrayListtemp = mid + 1;while (true){if (temp > arr.length - 1 || arr[temp] != findVal){//退出break;}//否则,就temp放入到集合中resIndexList.add(temp);temp += 1;//temp右移}return resIndexList;}}
}

http://www.lryc.cn/news/39946.html

相关文章:

  • HTML面经
  • 我的十年编程路 2021年篇
  • ElasticSearch 8 学习笔记总结(七)
  • 【云原生】Docker 网络模式详解、容器间网络通信
  • Java开发 - 布隆过滤器初体验
  • 【计算机组成原理 - 第一章】计算机系统概论(完结)
  • C++类与对象(下)【详析】
  • exe反编译为.py文件
  • 38 openEuler搭建FTP服务器-FTP总体介绍
  • 三天吃透操作系统面试八股文
  • vue后台管理系统——添加i18n国际化功能——技能提升
  • 理清gcc、g++、libc、glibc、libstdc++的关系
  • 一、快速入门 MongoDB 数据库
  • PMP第一章到第三章重要知识点
  • 【事务与锁】当Transactional遇上synchronized
  • Pytorch模型转TensorRT步骤
  • 产品经理入门——必备技能之【产品运营】
  • 【Java实现文件上传】java后端+vue前端实现文件上传全过程详解(附源码)
  • 什么是SSD?SSD简述
  • MySQL基础------sql指令1.0(查询操作->select)
  • Python数据分析处理报告--实训小案例
  • OpenCV入门(十二)快速学会OpenCV 11几何变换
  • 小菜鸟Python历险记:(第二集)
  • ContentProvider程序之间数据的相互调用
  • 金三银四最近一次面试,被阿里P8测开虐惨了...
  • 算法题——给定一个字符串 s ,请你找出其中不含有重复字符的最长子串 的长度
  • 机器学习中的数学原理——F值与交叉验证
  • vue.js介绍
  • 【设计模式】1、设计模式七大原则
  • 【前端老赵的CSS简明教程】10-1 CSS预处理器和使用方法