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

1.1二分查找

二分查找,主要是针对基本有序的数据来进行查找target。

二分法的思想很简单,因为整个数组是有序的,数组默认是递增的。

1.1 使用条件

  • 用于查找的内容逻辑上来说是需要有序的
  • 查找的数量只能是一个,而不是多个

1.2 简介

  • 首先选择数组中间的数字和需要查找的目标值比较 如果相等最好,就可以直接返回答案了
  • 如果不相等
    • 如果中间的数字大于目标值,则中间数字向右的所有数字都大于目标值,全部排除
    • 如果中间的数字小于目标值,则中间数字向左的所有数字都小于目标值,全部排除

2 代码

  • 循环条件要使用while(left<= right),因为当(left== right)这种情况发生的时候,得到的结果是有意义的
  • if(nums[mid] > target) , right要赋值为 mid- 1, 因为当前的 nums[mid]
    一定不是 target ,需要把这个 mid位置上面的数字丢弃,那么接下来需要查找范围就是[left, mid- 1]

2.1 非递归方法:

public class BinarySearch {public static void main(String[] args) {int [] nums = {1,2,3,4,5,9,10,11,19,25};int target = 19;/** 第一种方法:实例化对象,BinarySearch test = new BinarySearch();System.out.println("实例化对象调用:"+search(nums,target));*///第二种方法:直接通过类名.方法名调用,方法为static的时候使用System.out.println("下标为:"+ BinarySearch.search(nums,target));}//非递归查找public static int search(int[] nums, int target){int len = nums.length;int left=0;int right=len-1;//目标存在的区间可能在两者之间 注意"="号while(left<=right){int mid = (left+(right-left)/2);if(nums[mid]==target){return mid;}else{if(nums[mid]>target){right = mid - 1 ;}else{left = mid +1 ;}}}return -1;}}

2.2 递归查找

public class BinarySearch02 {public static void main(String[] args) {int [] nums = {1,2,3,4,5,9,10,11,19,25};int target = 19;//递归需要传参数int left = 0;int len = nums.length;int right = len-1;//直接通过类名.方法名调用,方法为static的时候使用System.out.println("下标为:"+ BinarySearch02.Digui(nums,left,right,target));}//递归查找public static int Digui(int[] nums, int left, int right, int target) {while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] > target) {return Digui(nums, left, mid - 1, target);} else if (nums[mid] < target) {return Digui(nums, mid + 1, right, target);} else {return mid;}}return -1;}
}
http://www.lryc.cn/news/236499.html

相关文章:

  • 提升工作效率,打造精细思维——OmniOutliner 5 Pro for Mac
  • idea显示pom.xml文件漂黄警告 Dependency maven:xxx:xxx is vulnerable
  • Linux中安装部署环境(JAVA)
  • Zabbix Proxy分布式监控
  • 前端设计模式之【代理模式】
  • Canal+Kafka实现MySQL与Redis数据同步(二)
  • NOIP2023模拟19联测40 诡异键盘
  • 算法设计与分析 | 众数问题(c语言)
  • sql server外键设置
  • R语言实现多变量孟德尔随机化分析(1)
  • 搭建 AI 图像生成器 (SAAS) php laravel
  • Maven引用本地jar包
  • 一起学docker系列之五docker的常用命令--操作容器的命令
  • WPF打开对话框选择文件、选择文件夹
  • nginx学习(3)
  • 【系统架构设计】计算机公共基础知识: 4 数据库系统
  • 主键问题以及分布式 id
  • ReentranReadWriteLock 使用案例
  • “我们把最扎心的话,说给了自己最亲近的人” 何解?| IDCF
  • MongoDB之索引和聚合
  • 【GEE】基于GEE进行非监督学习
  • 多视图聚类的论文阅读(一)
  • K-Means算法进行分类
  • 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv 计算机竞赛
  • 网络协议入门 笔记一
  • 系列十一、你平时工作用过的JVM常用基本配置参数有哪些?
  • 如何为视频添加旁白,有哪些操作技巧?
  • 如何简单挖掘公益SRC?
  • PhpStorm激活
  • mysql 怎么做定时备份 / mysql 备份 / sql文件导出