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.mzph.cn/news/199286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 集成Netty、WebSocket,5分钟搭建聊天通信系统

文章目录 前言Netty简介使用Netty开发WebSocket应用程序开始项目一、添加依赖二、自定义处理器三、初始化通道加载器四、配置启动器五、添加启动监听器六、启动项目七、演示效果1. 客户端1看到其他客户端上线2. 客户端3收到客户端1发送的消息3. 客户端1收到客户端2下线前言 在…

出海风潮:中国母婴品牌征服国际市场的机遇与挑战!

近年来&#xff0c;中国母婴品牌在国内市场蓬勃发展的同时&#xff0c;也逐渐将目光投向国际市场。这一趋势不仅受益于中国经济的崛起&#xff0c;还得益于全球市场对高质量母婴产品的不断需求。然而&#xff0c;面对国际市场的机遇&#xff0c;中国母婴品牌同样面临着一系列挑…

学习MYSQL

DDL 建表 DML增删改 DQL查询 DCL控制用户权限 存储引擎 MYSQL体系结构 *连接层 *服务层&#xff08;DML DDL &#xff09; *引擎层&#xff08;可插拔&#xff09;&#xff08;索引在这里&#xff0c;不通的引擎 索引结构不同&#xff09; *存储层&#xff0c; 外键&#xff…

java springboot简单了解数据源实现 与 springboot内置数据源

之前 我们讲到的项目 数据库管理 用了三种技术 数据源管理方式 我们选择了: DruidDataSource 持久化技术: MyBatis-Plus / MyBatis 数据库: MySql 那么 我们在刚接触数据库连接时 是没用配置Druid的 那它有没有用数据源呢&#xff1f; 我们接触过的配置Druid的方式有两种 用…

【发布小程序配置服务器域名,不配置发布之后访问就会报错request:fail url not in domain list】

小程序在本地开发的时候大家通常会在微信开发者工具中设置“不校验合法域名、web-view (业务域名)、TLS 版本以及HTTPS证书”&#xff0c;久而久之可能会忘掉这个操作&#xff0c;然后打包直接上线发布&#xff0c;结果发现访问会报错request:fail url not in domain list&…

Chat-GPT原理

Chat-GPT原理核心:基于Transformer 架构 ​ 以下是参考文献的部分截图原文说明&#xff1a; ​ Transformers are based on the “attention mechanism,” which allows the model to pay more attention to some inputs than others, regardless of where they show up in t…

热门好用的核验类API,含免费次数

信息核验类 实人认证&#xff08;人像三要素&#xff09;&#xff1a;输入姓名、身份证号码和一张人脸照片&#xff0c;与公安库身份证头像进行权威比对&#xff0c;返回比对分值。实名认证&#xff08;身份证二要素&#xff09;&#xff1a;核验身份证二要素&#xff08;姓名…

2023年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题(三)

2023年甘肃省职业院校技能大赛&#xff08;中职教师组&#xff09; 网络安全竞赛样题&#xff08;三&#xff09; &#xff08;总分1000分&#xff09; 目录 模块A 基础设施设置与安全加固 模块B 网络安全事件响应、数字取证调查和应用安全 B-1任务一&#xff1a;主机发现…

MySQL之binlog文件过多处理方法

背景 MySQL由于大量读写&#xff0c;导致binlog文件特别的多。从而导致服务器disk空间不足问题。 先备份binlog文件 tar -zcvf mysql.tar.gz mysql/data/mysql-bin.00* 修改MySQL配置 binlog过期时间 show variables like expire_logs_days; 这里 0 表示 永不过期 如果为 n…

在2台RHEL 8服务器上安装并配置PostgreSQL 14的主从架构

为了在两台RHEL 8服务器上安装并配置PostgreSQL 14的主从架构&#xff0c;你需要按照以下步骤操作。这将包括安装PostgreSQL、初始化数据库、调整配置、设置归档目录等。请确保你具有root或具有适当权限的用户访问权限来执行这些操作。 1. 安装PostgreSQL 14 在两台服务器上都…

卡通渲染总结《一》

本文是在看完之前的综述论文《Cartoon Style Rendering》的总结&#xff0c;论文时间是2008年有点早&#xff0c;但有一定启发意义。 前言 首先卡通渲染是非真实化渲染&#xff08;NPR&#xff09;的一个部分.而NPR旨在模拟出手工插图的效果例如油画、墨水画、漫画风格作品。 …

常用类与比较器

常用类 学一个类&#xff0c;先搞清楚继承关系&#xff0c;再看源码 包装类Wrapper jdk5之前是手动装箱拆箱 jdk5及之后是自动装箱拆箱&#xff08;调用valueOf方法&#xff08;自动默认&#xff09;/创建对象的构造方法&#xff0c;XXXvalue方法…

mongdb配置ssl

mongodb5.0.9 centos7.6 x86 1、正常启动mongod -f mongodb.conf 【前言】 ssl配置流程步骤&#xff0c;按照以下顺序处理即可。 1.生成证书&#xff0c;根证书&#xff0c;服务端证书&#xff0c;客户端证书 2.配置服务端ssl配置&#xff0c;测试she…

vue form表单的封装--使用的是elementUI

该组件是一个动态生成表单的Vue组件&#xff0c;通过传入formList参数和插槽的方式实现表单项的定制化渲染 组件的封装 HCommonFormItem 根据传入的"formList"参数生成一组表单项&#xff0c;并通过插槽&#xff08;slot&#xff09;将表单项渲染出来。 在component…

编程模拟支付宝能量产生过程--数据控制流

#模拟支付宝蚂蚁森林的能量产生过程 behavior_points { # 定义行为对应的积分"步行": 2,"生活缴费": 10,"线下支付": 5,"网络购票": 5,"共享单车": 10 }total_points 0 # 初始化总积分while True: # 开…

【Python】基础练习题_文件及数据格式化

&#xff08;1&#xff09;从键盘输入一些字符&#xff0c;逐个把它们写到磁盘文件"test1.txt"上&#xff0c;直到输入一个#为止。 file_name "test1.txt"with open(file_name, "w") as file:while True:char input("请输入字符&#xf…

10倍提升启动的时间?Graalvm打包Springboot+MyBatis实测

graalvm使用前后对比图 相关代码博客&#xff1a;https://blog.csdn.net/weixin_43914278/article/details/134446327 工具大小时间graalvm打包的exe文件84.14MB0.251秒graalvm打包的docker文件121.27MB0.253秒jar包51.34MB2.153秒 解析 文件大小: graalvm打包的Docker文件…

苍穹外卖项目笔记(7)— 微信登录、商品浏览

前言 苍穹外卖项目代码&#xff1a;https://github.com/Echo0701/take-out 1 HttpClient 1.1 介绍 HttpClient 是 Apche Jakarta Common 下的子项目&#xff0c;可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且支持 HTTP 协议最新…

CUDA简介——For循环并行化

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式 kernel相关语法定义为&#xff1a; kernel函数定义&#xff0c;与常规C函数定义类似。不同之处在于&#xff0c;有__global__关键字。 为说明符&#xff0c;告诉编译器该函数应编译运行在device上&a…

java easyPOI导出一对多数据,设置边框,字体,字体大小

java easyPOI导出一对多数据&#xff0c;设置边框&#xff0c;字体&#xff0c;字体大小 需求总是千奇百怪&#xff0c;解决的方式也可以是多种多样。 今天碰到导出excel是一对多结构的&#xff0c;以往导出的数据都是一条一条的&#xff0c;所以采用的是比较方便简单的方法eas…