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

2023-12-05 20:04

本文主要是介绍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 返回值

这篇关于12.5_黑马数据结构与算法Java的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/458946

相关文章

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代