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

12.5_黑马数据结构与算法Java

目录

001 二分查找 算法描述

002 二分查找 算法实现

003 二分查找 问题1 循环条件

004 二分查找 问题2 中间索引

thinking:反码补码原码?

thinking:二进制转十进制?

thinking:无符号右移?

005 二分查找 问题3 比较符号

006二分查找 改动版

007 如何衡量算法好坏01

008 如何衡量算法好坏02

​编辑​编辑

009 时间复杂度 大O表示法1

010 时间复杂度 大O表示法2

012 二分查找 平衡版

013 二分查找 JAVA版

thinking:System.arraycopy?

014 二分查找 LeftRightmost

015 二分查找 LeftRightmost 返回值

视频

基础数据结构-001-二分查找-算法描述_哔哩哔哩_bilibili

001 二分查找 算法描述

f7a08693588d4e3aa250208ed32fc454.png

002 二分查找 算法实现

6ef4146ad5bc45df803d99f797f73ec7.png

003 二分查找 问题1 循环条件

05179eef7e514822b6747327a8aea98f.png

因为这次查询的最后时候,是i=j,且最后要查询的值也是当i=j的时候才拥有。

每一次的比较都有,但是单单缺少了最后一次的比较。也就是当i=j这一次。由于while循环的条件是i<j,因此因为i=j,就跳出while循环条件,从而输出-1 这个bug。

7b6876937ad347a79d2567d75434f921.png

004 二分查找 问题2 中间索引

thinking:反码补码原码?

这里涉及到JAVA原码补码反码中的知识点,又恰巧当时学习黑马JAVA上的时候这节课跳过了。遂来补课。

运算符-12-多学一招原码反码补码_哔哩哔哩_bilibili

 8个bit=1个字节

9109a3b28374454eada2b1e923987769.png

thinking:二进制转十进制?

43e395138b414f6b8fc8d7b1c78475dd.png

关于二进制与十进制互转的方法(简单好学!)_二进制转十进制_猿西西的博客-CSDN博客

1e833277dbb44255ae8f7d40cd9531b5.png

bc4fd542603a4c27bb086dc6a3a7eea1.png

24bad5b5202a496e8cf67d7cec568da7.png 8c1917070903414781e5ea8e621d40ba.png

00912da04ceb45b6bc9ff7b2fbd03f4e.png

3240359a9fc84654b8b19e298be1af49.png

318745133c6945509ac6fffe0095ab8d.png7e3a6c1864554e95b7a98d1e439eb336.png 7e8c389bab5649be8119bdc940712bdd.png

38530d7446aa45fe95a595ef1d59badf.png

因此,一个字节他的取值范围是正的127到负的128. 

232dc9cadd2d4544819b8f82f4315279.png

6bb31eb5a4ed41aab773cf112e71ed6c.png

fd7da9171d1d44f3996f7efcc3233953.png

右移一次,相当于除2

1df1fa3917a64e4d83a0a184a59946cf.png

thinking:无符号右移?

c114db99aca64c8fb5ec0027be947485.png

在java中,总是将最高位视为符号位

接下来,我们来看回数据结构的视频。

b3e9c6a53fc94b2190909385c9938739.png

产生这样的情况是因为,j本来是一个很大的数字,当第二次再加上j的时候,这个m就变得很大了,大到没有办法用计算机语言正常表示了,因为java中采用的有符号的表示方式。

c0fc3e5046634afbab6c21079c814379.png

71eabbcd5653482e87d7b3b9c317783b.png

有两种表现形式,一种是有符号的,一种是无符号的。无符号的表现形式就是正常的,但是java中采用的是有符号的,因此就会出现负数的情况。

因此采用无符号右移,解决这样的情况。而且也遵循除以2的原则,如果有小数的话,采用向下取整。

2467269accbf44f1989bf72a1388ccde.png

005 二分查找 问题3 比较符号

3cafb1fc8a334d009085dfd1814f5b7e.png

006二分查找 改动版

注重理解!

j指向的只是边界,而i指向的有可能还要参与比较。因此不可以加等于号,加了之后,j也就是边界也会参与比较。当查询的元素不存在的时候,就会出现死循环。因此,改动版的也称为左闭右开。而基础版的叫做左闭右闭。开:只是边界。闭:既是边界,又是有可能参与比较的东西。

b14db961e5d2440a966011ce53054732.png

007 如何衡量算法好坏01

008 如何衡量算法好坏02

一般采用事前分析法。

假设每一行代码的运行速率是相同的。

找出运行规律,计算两种代码运行了多少次。

当基数小的时候是看不出什么的,要让基数变大,才可以看出哪个算法好哪个算法不好。

二分查找法:找规律

左(二分查找),右(线性查找)

009 时间复杂度 大O表示法1

010 时间复杂度 大O表示法2

012 二分查找 平衡版

问题:当要查询的元素在最左边或者在最右边的时候,要查询的次数不相同

改动后:

013 二分查找 JAVA版

thinking:System.arraycopy?

System.arraycopy的使用方法详解_HiSiri666666的博客-CSDN博客

014 二分查找 LeftRightmost

left

Right

015 二分查找 LeftRightmost 返回值

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

相关文章:

  • 【PID学习笔记 5 】控制系统的性能指标之一
  • HarmonyOS学习--TypeScript语言学习(三)
  • Matlab 镜像变换(2D)
  • SpringBoot3-快速体验
  • 计数问题(数位DP)
  • SQL Server事务(Transaction)
  • Python语言基础学习大纲(由某大模型生成)
  • nodejs+vue+微信小程序+python+PHP天天网站书城管理系统的设计与实现-计算机毕业设计推荐
  • 工业机器视觉megauging(向光有光)使用说明书(十二,轻量级的visionpro)
  • HarmonyOS学习--了解基本工程目录
  • JRT导出协议实现
  • Unity中动态合批
  • 逆水行舟!浅谈24届双非本科秋招
  • vue3请求代理proxy中pathRewrite失效
  • 练习题——-【学习补档】日期差值
  • 面试问题 --文件描述符和流
  • 离线安装Zabbix的MariaDB报Error: Package: 1:mariadb-server-5.5.68-1.el7.x86 64异常解决方法
  • 【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成
  • Python:可以做什么?
  • Lookup Argument简史
  • 【unity3D】Transform组件(如何访问和获取Transform组件)
  • 单实例应用程序
  • Qlik 成为网络犯罪的焦点
  • 1+X Web 前端开发职业技能等级证书模拟题(中级)理论知识
  • 2023.12.4 关于 Spring Boot 统一异常处理
  • 企业网络安全守护者:EventLog Analyzer日志审计系统
  • 剪映最新版的4.9,主要更新的功能(于2023年12月2日发布)
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis核心配置详解
  • maven-profile
  • 用python找到音乐数据的位置,并实现音乐下载