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

数据结构知识点1

目录

一、时间复杂度和空间复杂度

1.1时间复杂度:

1.2空间复杂度:

二、装箱和拆箱

三、泛型

3.1泛型类的使用:

3.2泛型的上界:

3.3泛型方法:


一、时间复杂度和空间复杂度

1.1时间复杂度:

时间复杂度是一个程序中算法执行的次数,我们用大O渐进表示法计算

我们看以下代码:

      void func1(int N){int count = 0;for (int i = 0; i < N ; i++) {    //执行了N次for (int j = 0; j < N ; j++) {   //执行N次count++;}}for (int k = 0; k < 2 * N ; k++) {   //执行2*N次count++;}int M = 10;while ((M--) > 0) {   //执行了10次count++;}System.out.println(count);  //一共执行了N^2+2*N+10次,采用大O渐进表示时间复杂度为O(N*N)}

如果要计算递归的时间复杂度,公式就是:递归次数*每次递归代码执行次数

// 计算阶乘递归factorial的时间复杂度?
long factorial(int N) {//递归了N次,每次递归的代码时间复杂度是O(1),所以总时间复杂度是O(N*1)=O(N)return N < 2 ? N : factorial(N-1) * N;
}

推导大O阶方法:

1 、用常数 1 取代运行时间中的所有加法常数。
2 、在修改后的运行次数函数中,只保留最高阶项。
3 、如果最高阶项存在且不是 1 ,则去除与这个项目相乘的常数。得到的结果就是大 O 阶。

1.2空间复杂度:

空间复杂度是计算临时占用存储空间大小的量度

    // 计算bubbleSort的空间复杂度?void bubbleSort(int[] array) {for (int end = array.length; end > 0; end--) {boolean sorted = true;for (int i = 1; i < end; i++) {if (array[i - 1] > array[i]) {Swap(array, i - 1, i);sorted = false;}}if (sorted == true) {break;}}}//由于没有开辟新内存,所以空间复杂度为O(1)// 计算fibonacci的空间复杂度?int[] fibonacci(int n) {long[] fibArray = new long[n + 1];//代码在这里创建了大小为n+1的数组,故空间复杂度为O(n)fibArray[0] = 0;fibArray[1] = 1;for (int i = 2; i <= n ; i++) {fibArray[i] = fibArray[i - 1] + fibArray [i - 2];}return fibArray;}

二、装箱和拆箱

装箱就是把基本数据类型转成包装类类型,拆箱就是把包装类类型转成基本数据类型,装箱和拆箱都有自动和手动:

        int i=10;Integer ii=i;//自动装箱Integer ij=Integer.valueOf(i);//手动装箱int j=ii;//自动拆箱int ji=ii.intValue();//手动拆箱

三、泛型

3.1泛型类的使用:

语法:

//泛型类<类型实参> 变量名; // 定义一个泛型类引用
//new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象
MyArray<Integer> list = new MyArray<Integer>();

注意:泛型只能接受类,所有的基本数据类型都要使用包装类 

泛型类的使用例子如下:

//定义一个数组泛型类
class MyArray <T>{public Object[] array = new Object[10];//以后创建泛型数组最好使用这样的格式public T getPos(int pos) {return (T)array[pos];//返回任意类型的值}public void setVal(int pos,T val) {this.array[pos] = val;//传入T类型值}
}
public class Main {public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<>();myArray.setVal(0,10);MyArray<String> myArray1=new MyArray<>();//由于myArray是Integer,这里要传入的是String类型,所以要重新实例化一个变量myArray1.setVal(1,"hello");//字符串也可以存放String ret = myArray1.getPos(1);System.out.println(ret);//hello}
}

3.2泛型的上界:

如果没有指定泛型的上届,那么默认是extends Object:

class MyArray <T>{        //这里没有指定泛型上界,默认是<T extends Object>public Object[] array = new Object[10];public T getPos(int pos) {return (T)array[pos];}public void setVal(int pos,T val) {this.array[pos] = val;}
}

语法:

class 泛型类名称<类型形参 extends 类型边界> {
...
}
class MyArray <E extends Number>{}
public class Main {public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<>();MyArray<String> myArray1=new MyArray<>();//编译错误,因为String不是Number的子类型}
}

3.3泛型方法:

语法:方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }

//定义一个泛型类 ,找到数组当中的最大值
class Alg<T extends Comparable<T>> {public T findMax(T[] array) {T max = array[0];for (int i = 1; i < array.length; i++) {//if(array[i] > max) {if(array[i].compareTo(max) > 0) {max = array[i];}}return max;}
}
//定义一个泛型方法,找到数组当中最大值
class Alg2 {public <T extends Comparable<T>> T findMax(T[] array) {T max = array[0];for (int i = 1; i < array.length; i++) {//if(array[i] > max) {if(array[i].compareTo(max) > 0) {max = array[i];}}return max;}
}
//定义一个静态泛型方法,找到数组当中最大值
class Alg3 {public static <T extends Comparable<T>> T findMax(T[] array) {T max = array[0];for (int i = 1; i < array.length; i++) {//if(array[i] > max) {if(array[i].compareTo(max) > 0) {max = array[i];}}return max;}
}

相关文章:

数据结构知识点1

目录 一、时间复杂度和空间复杂度 1.1时间复杂度&#xff1a; 1.2空间复杂度&#xff1a; 二、装箱和拆箱 三、泛型 3.1泛型类的使用&#xff1a; 3.2泛型的上界&#xff1a; 3.3泛型方法&#xff1a; 一、时间复杂度和空间复杂度 1.1时间复杂度&#xff1a; 时间复杂…...

时序数据库QuestDB在Winform窗体应用

以下是QuestDB在Winform使用的代码&#xff1a; //初始化 private void Init() { //创建数据库对象 (用法和EF Dappper一样通过new保证线程安全) SqlSugarClient Db new SqlSugarClient(new ConnectionConfig() { ConnectionString “host10.3.5.227;port8812;usernameadmin;…...

从零开始学习 Go 语言

Go 语言&#xff08;又称 Golang&#xff09;是由 Google 开发的一种静态强类型、编译型、并发型编程语言。它以其简洁的语法、高效的并发支持和强大的标准库而闻名&#xff0c;非常适合开发高性能的服务器端应用、分布式系统和云计算工具。本文将从零开始&#xff0c;详细介绍…...

自由学习记录(45)

顶点片元着色器&#xff08;important&#xff09; 1.需要在Pass渲染通道中编写着色器逻辑 2.可以使用cG或HLSL两种shader语言去编写Shader逻辑 3.代码量较多&#xff0c;灵活性较强&#xff0c;性能消耗更可控&#xff0c;可以实现更多渲染细节 4.适用于光照处理较少&#xf…...

数据源支持远程Excel/CSV,数据集支持分组字段功能,DataEase开源BI工具v2.10.6 LTS版本发布

2025年3月17日&#xff0c;人人可用的开源BI工具DataEase正式发布v2.10.6 LTS版本。 这一版本的功能变动包括&#xff1a;数据源方面&#xff0c;新增支持远程Excel/CSV数据源&#xff0c;支持以HTTP、HTTPS、FTP协议获取远程服务器上的Excel和CSV数据文件&#xff0c;并且可以…...

SpringBoot3使用CompletableFuture时java.util.ConcurrentModificationException异常解决方案

问题描述 在Spring Boot 3项目中&#xff0c;使用CompletableFuture进行异步编程时&#xff0c;偶发{"code":500,"msg":"java.util.ConcurrentModificationException"}异常&#xff0c;但代码中并未直接操作List或CopyOnWriteArrayList等集合类…...

【Nodejs】2024 汇总现状

之前已经调研了容器、nexus-public&#xff0c;实现了本地构建应用镜像和基础设施的镜像。为实现分布式一体化协作开发的目标&#xff0c;还需要配套的线上协作开发环境。故而重回前端调研现状&#xff0c;比较 5 年前的 nodejs 快好的啊。 以下是针对 Node.js 工具链的深度解析…...

LeetCode 每日一题 2025/3/17-2025/3/23

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/17 1963. 使字符串平衡的最小交换次数3/18 2614. 对角线上的质数3/19 2610. 转换二维数组3/20 2612. 最少翻转操作数3/21 2680. 最大或值3/22 2643. 一最多的行3/23 2116…...

STM32__红外避障模块的使用

目录 一、红外避障模块 概述 二、直接读取OUT引脚电平 三、使用中断方式触发 一、红外避障模块 概述 引脚解释&#xff1a; VCC接3.3V 或 5.0VGND接开发板的GNDOUT数字量输出(0或1&#xff09;; 低电平时表示前方有障碍 ; 通过可调电阻调整检测距离 产品特点&#xff1a; …...

android 音量调节

安卓音频数据的最终音量由三部分组成&#xff0c;分别是master volume(全局音量&#xff0c;对整个系统所有的音频数据生效&#xff09;&#xff0c;stream volume(流音量&#xff0c;只针对特定类型的音频数据生效)和track volume(track音量&#xff0c;只针对某个audiotrack的…...

Redis JSON 用id读取content总结(sendCommand())

Redis JSON 读取总结&#xff08;方法 2 - sendCommand()&#xff09; &#x1f4a1; 背景 在 Redis 中&#xff0c;我们存储了 JSON 数据&#xff0c;并希望通过 Jedis sendCommand() 方式读取 JSON 里的 "content" 字段。由于 jedis.jsonGet() 可能在旧版本不支持…...

使用Qdrant等其他向量数据库时需要将将numpy 数组转换为列表 确保数据能被正确处理和序列化,避免类型不兼容的问题。

在使用Qdrant等其他向量数据库时需要 转换 numpy 数组为列表主要是为了确保数据能被正确处理和序列化&#xff0c;避免类型不兼容的问题。具体原因如下&#xff1a; 序列化兼容性&#xff1a; 很多数据库接口、API 或者 JSON 序列化工具只能处理 Python 的内置类型&#xff08;…...

[AI速读]如何构建高效的AMBA协议检查器(Checker IP)

在芯片验证过程中,检查器(Checker)是确保设计符合协议规范的关键工具。本文基于一篇技术论文,分享如何为AMBA协议(如AXI、AHB)构建可重用的检查器IP(Checker IP,简称CIP),并简化其核心思路,帮助工程师快速上手。 一、什么是Checker IP? Checker IP是一组用SystemVe…...

基于3DMax与Vray引擎的轻量级室内场景渲染实践

欢迎踏入3DMAX室内渲染的沉浸式学习之旅!在这个精心设计的实战教程中,我们将携手揭开3DMAX与Vray这对黄金搭档在打造现实室内场景时的核心奥秘。无论您是渴望入门的3D新手,还是追求极致效果的专业设计师,这里都将为您呈现从场景蓝图构建到光影魔法施加的完整技术图谱。我们…...

浅谈Qt事件子系统——以可拖动的通用Widget为例子

浅谈Qt事件子系统——以可拖动的通用Widget为例子 这一篇文章是一个通过实现可拖动的通用Widget为引子简单介绍一下我们的事件对象子系统的事情 代码和所有的文档 1&#xff1a;Qt侧的API介绍和说明 ​ 这个是每一个小项目的惯例&#xff0c;我会介绍大部分Qt程序中使用到的…...

QT Quick(C++)跨平台应用程序项目实战教程 2 — 环境搭建和项目创建

目录 引言 1. 安装Qt开发环境 1.1 下载Qt安装包 1.2 安装Qt 1.3 安装MSVC编译器 2. 创建Qt Quick项目 2.1 创建新项目 2.2 项目结构 2.3 运行项目 3. 理解项目代码 3.1 main.cpp文件 3.2 Main.qml文件 引言 在上一篇文章中&#xff0c;我们介绍了本教程的目标和结…...

登山第二十梯:无人机实时自主探索——我是一只小小小鸟

文章目录 一 摘要 二 资源 三 内容 一 摘要 自主探索是无人机 &#xff08;UAV&#xff09; 各种应用的基本问题。最近&#xff0c;基于 LiDAR 的探索因其能够生成大规模环境的高精度点云地图而受到广泛关注。虽然点云本身就为导航提供了信息&#xff0c;但许多现有的勘探方…...

Pytorch使用手册—扩展 TorchScript 使用自定义 C++ 操作符(专题五十三)

提示 本教程自 PyTorch 2.4 起已弃用。有关 PyTorch 自定义操作符的最新指南,请参阅 PyTorch 自定义操作符。 PyTorch 1.0 版本引入了一种名为 TorchScript 的新编程模型。TorchScript 是 Python 编程语言的一个子集,可以被 TorchScript 编译器解析、编译和优化。此外,编译后…...

word插入Mathtype公式居中和自动更新

word插入公式自动更新 前提&#xff1a;安装Mathtype 1.word中查看页的宽度 出现如下 2.设置样式 出现这个窗口 给样式随便起个名字 3.修改样式 3.1 设置两个制表位 第二个 3.2 修改公式字体 如下所示 4. 修改公式格式 4.1在word中打开 Mathtype 4.2 修改公式的格式 变成…...

网络层之IP协议

在讨论传输层时, 我们都只讨论了发送方和接收方的问题, 而没有讨论中间的网络形态的问题. 也就是数据包如何从主机传送到主机的? 如图, 主机B发送数据到主机C, 发送报文需要进行路径选择, 主机B-> F-> G-> H-> C-> D -> 主机C 这条路径是如何被选择出来的?…...

基于springboot的旅游网站(013)

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;旅游网站当然也不能排除在外&#xff0c;随着旅游网站的不断成熟&#xff0c;它彻底改变了过去传统的旅游网站方式&#xff0c;不仅使旅游管理…...

人工智能 - 在 Spring Boot 中调用 AnythingLLM+DeepSeek 的知识库获取消息接口

整体逻辑: 自建系统的web UI界面调用接口: 1.SpringBoot接口&#xff1a;/anything/chatMessageAnything 2.调用anythingLLM - 调用知识库deepseek r1 . 部署 AnythingLLM DeepSeek 本地知识库 的环境要求如下&#xff1a; 一、硬件要求 CPU 最低&#xff1a;4核&#x…...

体育直播模板nba英超直播欧洲杯直播模板手机自适应

源码名称&#xff1a;体育直播模板nba英超直播欧洲杯直播模板手机自适应帝国cms 7.5模板 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff01; 模板特点&#xff1a; 程序伪静态…...

STM32-ARM

一、体系架构 ARM里有37个寄存器ALU算数逻辑单元PC程序计数器&#xff1a;指向哪里执行哪里SP栈指针寄存器LR链接寄存器&#xff1a;保存函数入口地址CPSR(current program status register)当前程序状态寄存器&#xff1a;SOSR(CPSR的备份)MMU(内存管理单元)Cache高速缓冲(iCa…...

ripro 主题激活 问题写入授权Token失败,可能无文件写入权限

ripro 主题激活 问题 写入授权Token失败&#xff0c;可能无文件写入权限 找到主题下面的functions.php文件&#xff0c;给其他写入权限。就好了。...

Lustre 语言的 Rust 生成相关的工作

目前 Lustre V6 编译器支持编译生成的语言为C语言。但也注意到&#xff0c;以 Rust 语言为生成目标语言&#xff0c;也存在若干相关工作。 rustre&#xff08;elegaanz&#xff09; 该项工作为 Lustre v6 语言的解析器&#xff0c;使用 Rust 语言实现。生成 Lustre AST。 项…...

计算机网络——通信基础和传输介质

物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&#xff09;的传输 到了数据链路层之后&#xff0c;它会以帧为单位&#xff0c;把若干个比特交给物理层&#xff0c;物理层需要把这些比特信息转化成信号&#xff0c;在物理传输媒体上进行传输 通信基础基本概念 信…...

python-selenium 爬虫 由易到难

本质 python第三方库 selenium 控制 浏览器驱动 浏览器驱动控制浏览器 推荐 edge 浏览器驱动&#xff08;不容易遇到版本或者兼容性的问题&#xff09; 驱动下载网址&#xff1a;链接: link 1、实战1 &#xff08;1&#xff09;安装 selenium 库 pip install selenium&#…...

Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.

What went wrong: Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac’. Could not resolve all files for configuration ‘:path_provider_android:androidJdkImage’. Failed to transform core-for-system-modules.jar to match attributes {…...

【Linux 维测专栏 2 -- Deadlock detection介绍】

文章目录 kernel 编译选项配置deadlock 测试代码deadlock 测试 logkernel 编译选项配置 通过 menuconfig 配置下面编译选项 # lockdep CONFIG_LOCK_STAT=y CONFIG_PROVE_LOCKING=y CONFIG_DEBUG_LOCKDEP=y上面配置完成后会定义下面宏: CONFIG_LOCK_DEBUGGING_SUPPORT=y CONF…...