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

路漫漫-数据结构与算法邂逅Java

1.引入

这里以一个二分查找引入,详细去介绍数据结构与算法当中的注意事项及其基本知识的扫盲。

1.1二分查找相关问题

先直接给出一段二分的代码,看似简单的代码,也是很多人看过的第一个算法,但是你真的搞清楚了二分吗?二分的细节点有很多很多,如下来一一的去介绍。

public class BasicBanirySerch {public static int binarySearchBasic(int[] arr,int target){int length = arr.length;int i=0; int j=length-1;  //i,j代表的是左边界和右边界while (i<=j){int m=(i+j)>>>1;if(target<arr[m]){j=m-1;} else if (arr[m]<target) {i=m+1;}else {return m; //找到了}}return -1; //未找到}public static void main(String[] args) {int[] arr=new int[]{1,3,5,7,9};System.out.println(binarySearchBasic(arr,5));}
}

争对上述代码如果说我提出以下问题,你能够正确的回答吗:

1.为什么是i<=j,而不是i<j呢?

由于i和j的指向的都是数组界内的元素,所以说i==的时候表示该元素可以进行比较,即二则指向的都是有效元素。

2.为什么写成(i+j)>>>1呢?

这和Java底层去存储01数据有着密切的关联即,Java最底层是将01数据的最高位做为符号位的,如果说i+j的值大于了数据类型表示的范围(比如说int 可以表示32位01数据),溢出了之后机会导致最高位为1,变成了负数。但是抓住了最底层的01数据都是一样的,而且无符号右移针对于二进制数来说就是除以2(0111(7)>>>1=0011(3)),所以说即使我i+j溢出了我无符号右移也能表示出二者的中间值。

3.都写成小于符号有

写成小于符号是为了符合人对于数组的正确思维,从左到右是递增的一个趋势,所以说我通过小于符号控制target是大于还是小于很符合思维,i,j也是同理。

二分查找改动版:

这里就是口述,理解了基本的i,j关系理解改动版本就是小问题了,让j=length,即j的含义是不属于边界内的元素,"指向的不是要查找的元素",那么此时结束条件就变成了i<j,以及如果说在左侧就是j=m,细品"指向的不是要查找的元素"即可。

http://www.dtcms.com/a/474527.html

相关文章:

  • 上海学做网站筑龙网app下载
  • 深入理解动态内存管理(C语言)
  • Viterbi解码算法:从理论到实践
  • 怎么在网站做推广不要钱珠海微信网站开发
  • 【文件快速搜索工具】实用工具强推之Everything-快速搜索工具的详细图文下载安装教程
  • sql优化之索引下推误区
  • 编程基础:组件编程思想
  • 小兔鲜项目要点总结
  • 检测网站速度广州免费停车的地方
  • 【C++】list相关接口及模拟实现
  • Vue-MVVM 模型
  • 网站需要什么费用高端品牌网站有哪些
  • Emacs折腾日记(三十二)——org mode的基本美化
  • 从数据混沌到智能驱动:非结构化数据中台的技术实践与方法论指南
  • 什么是自相关分析(ACF)?
  • Web前端开发,新手入门指南
  • 织梦增加网站英文名称百度商桥怎么和网站
  • Paper2Agent:将科研论文转化为可交互的AI智能体工具项目
  • 静态网页 vs 动态网页:爬虫该如何选择抓取策略?
  • AI/CICD/Next/React NativeTaro内容
  • godot 通过 GDExtension 配置 C++ 开发环境
  • XMLHttpRequest对象
  • 广州市外贸网站建设内容管理系统开发
  • 带你了解STM32:SPI通信(软件部分)
  • 标量子查询优化(二)
  • 网站建设的客户都在哪里Wordpress西联
  • ppo dino 多余尺寸删除ai 思路2 绕过cad软件
  • 【LeetCode】66. 加一
  • 日志1--时间戳类型设计
  • 手机网站 qq代码免费app制作工具