尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
什么是时间复杂度、什么是空间复杂度?
在 Java 算法以及所有计算机科学领域中时间复杂度和空间复杂度是衡量算法效率的两个核心指标。它们通常使用大 O 表示法Big O Notation来描述。简单来说它们衡量的是当数据规模通常用 nn 表示增大时算法的执行时间或内存消耗是如何变化的。1. 时间复杂度 (Time Complexity)定义时间复杂度并不是指代码运行的“绝对时间”比如 2 秒或 5 毫秒而是指算法中基本操作的执行次数与数据规模 nn 之间的增长关系。在 Java 中如何看看循环单层循环通常是 O(n)O(n) 嵌套循环通常是 O(n2)O(n2) 。看递归需要结合递归树的深度和每层的操作次数。看 Java APIArrayList.get(i)是 O(1)O(1) 而ArrayList.remove(0)是 O(n)O(n) 因为后续元素都要往前挪。常见的时间复杂度从快到慢O(1)O(1)常数时间无论数据多少执行时间不变。例如数组按索引取值。O(log⁡n)O(logn)对数时间每次操作数据量减半。例如二分查找。O(n)O(n)线性时间执行次数与数据量成正比。例如遍历一次数组。O(nlog⁡n)O(nlogn)线性对数时间高效排序算法的典型复杂度。例如Java 的Arrays.sort()双轴快排/归并。O(n2)O(n2)平方时间双重嵌套循环。例如冒泡排序、简单的两数之和暴力解法。2. 空间复杂度 (Space Complexity)定义空间复杂度是指算法在运行过程中临时占用存储空间的大小与数据规模 nn 之间的增长关系。⚠️ Java 中的关键注意点在 Java 中空间复杂度主要关注额外空间Auxiliary Space即除了输入数据本身占用的内存外算法还需要多少额外内存。常见场景O(1)O(1)常数空间只用了几个固定的变量没有创建新的集合或大数组。// 无论 n 多大只用了一个 sum 变量 int sum 0; for(int i0; in; i) sum i;O(n)O(n)线性空间创建了一个与输入规模相关的新数组或集合。// 创建了一个长度为 n 的新数组 int[] copy new int[n];O(n)O(n)递归栈空间Java 的递归调用会占用栈内存。如果递归深度为 nn 空间复杂度就是 O(n)O(n) 。// 递归 n 次栈帧占用 O(n) 空间 void recursion(int n) { if(n 0) return; recursion(n-1); }3. 一个直观的 Java 例子假设我们要计算 12...n12...n 方案 A循环long sum 0; // O(1) 空间 for (int i 1; i n; i) { // 循环 n 次 sum i; // 基本操作 }时间复杂度O(n)O(n)空间复杂度O(1)O(1)方案 B数学公式return n * (n 1) / 2; // 只做一次乘法和除法时间复杂度O(1)O(1)空间复杂度O(1)O(1)总结指标关注点核心问题时间复杂度CPU 执行次数数据量翻倍代码要多跑多少倍空间复杂度内存额外占用数据量翻倍需要多申请多少内存在实际开发中我们通常追求时间换空间或空间换时间的平衡。例如用HashMap缓存结果增加 O(n)O(n) 空间来将查找时间从 O(n)O(n) 降到 O(1)O(1) 这就是典型的空间换时间。
RELATED

相关推荐

06-高级模式与实战项目——10. 组件测试 - React Testing Library

06-高级模式与实战项目——10. 组件测试 - React Testing Library

10. 组件测试 - React Testing Library 概述 React Testing Library (RTL) 是一个用于测试 React 组件的工具库,它鼓励编写以用户行为为中心的测试,而不是测试实现细节。通过模拟用户交互,验证组件的行为是否符合预期。 维度内容What以用户…

📅 2026/11/5 10:03:51
华为加速商业市场AI落地:要让鲲鹏昇腾算力像用水电一样便利

华为加速商业市场AI落地:要让鲲鹏昇腾算力像用水电一样便利

进入2026年以来,从“全民养虾潮”的现象级破圈,到AI深度嵌入企业生产经营,AI正加速从“生成内容”迈向“执行任务”的实质性落地阶段。在赋能千行百业的过程中,拥抱AI不再是大企业的专利,超6000万家中小企业正从观望者…

📅 2026/10/23 21:10:45
HarmonyKit | 鸿蒙新特性:cryptoFramework 异步加密哈希计算实战

HarmonyKit | 鸿蒙新特性:cryptoFramework 异步加密哈希计算实战

HarmonyKit | 鸿蒙新特性:cryptoFramework 异步加密哈希计算实战 引言:cryptoFramework 的异步哲学 HarmonyKit 的哈希计算工具是唯一使用 kit.CryptoArchitectureKit 的工具。鸿蒙加密框架提供了完整的密码学原语——哈希、对称/非对称加密、数字签名…

📅 2026/10/6 18:10:24
MORE NEWS

更多资讯

📰

附录 A · 工具速查表

附录导读本附录是混淆工具和反混淆工具的快速索引,按用途分类,相当于一本"工具字典":第 1 节:混淆工具——把代码变难分析的"加固方"武器;第 2 节:反混淆工具——把混淆代码还原回去的…

📰

PDO属性设置全解析:高效数据库操作秘诀

PDO::关于PHP的PDO这种技术, 它有一份参考手册。PDO:: — 设置属性(PHP 5 > 5.1.0, PECL pdo > 0.1.0)说明语法bool PDO::setAttribute ( int $attribute , mixed $value )我们需要把数据库句柄的属性给设置好。在下文之中, 会列举出一些可以被大家所用到的通用的属性内容…

📰

GMSK调制与基于Laurent分解的GMSK解调FPGA实现,第一篇(GMSK调制篇)

目录 一、GMSK简介 二、GMSK调制原理与步骤 1、GMSK调制原理 2、GMSK调制步骤 三、GMSK调制MATLAB仿真验证 1、GMSK调制MATLAB代码 2、GMSK调制MATLAB仿真 四、GMSK调制FPGA实现 1、GMSK调制FPGA Verilog代码 2、GMSK调制FPGA 仿真 五、FPGA和MATLAB联合仿真 1、…

📰

JAVA——抽象类、内部类和接口

一、抽象类如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类可以包含抽象方法与普通方法和属性。在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽…

📰

二叉树的学习

二叉树 1.树形概念 想了解二叉树的概念我们得先知道数的概念 树是⼀种⾮线性的数据结构,它是由n(n>0)个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下…

📰

DouK-Downloader 实操指南:从 Cookie 配置到 Docker 部署的抖音/TikTok 批量下载与数据采集

DouK-Downloader 实操指南:从 Cookie 配置到 Docker 部署的抖音/TikTok 批量下载与数据采集 【免费下载链接】TikTokDownloader 抖音 / TikTok 平台作品下载/数据采集工具 项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader 动手前&#x…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬