时间复杂度的计算逻辑与动态数组的手写实现
很多人学数据结构第一步就卡在时间复杂度上。上课跟着老师念O(1)、O(n)、O(log n)都挺顺但给一段代码自己算就不知道从哪入手了。其实核心就一句话找出来循环跑了多少轮和数据量n是什么关系。看下面这段代码int i 1; while (i n) { System.out.println(i); i i * 2; }每次循环i都翻倍。第1轮i1第2轮i2第3轮i4第4轮i8……第k轮的时候i的值是2的(k-1)次方。循环停下来的条件是i n所以2的(k-1)次方 n。两边取以2为底的对数k-1 log₂(n)所以k约等于log₂(n)1。去掉常数项时间复杂度就是O(log n)。这个推导方法可以套到所有循环结构上。如果循环变量每次加1第k轮ikkn就是O(n)。如果两层循环嵌套kn²就是O(n²)。找到这个关系时间复杂度就清楚了。还有一个点很多人忽略了最好情况、最坏情况、平均情况。在一个无序数组里找一个元素最好情况是第一个就是O(1)。最坏情况是最后一个才是或者压根不在O(n)。平时讨论复杂度没特别说明都默认是最坏情况因为要保证程序在任何输入下都能扛得住。说完时间复杂度再说数组。数组在内存里占用的是一块连续的空间这是它最根本的特征。正因为连续计算机可以用一个公式直接算出任意位置的地址起始地址加上索引乘以每个元素占用的字节数。所以数组支持随机访问通过下标取元素是O(1)。但连续性也带来了代价。数组创建时必须指定长度装满了只能新建一个更大的数组把旧数据搬过去。插入和删除的时候为了保持连续需要移动大量元素。在中间插入一个元素后面的所有元素都得往后挪一位。删除一个元素后面的所有元素都得往前挪一位。用代码实现一个动态数组把增删改查都写出来。插入操作要特别注意搬移的方向插入时后面的元素要往后挪必须从后往前循环。如果从前往后搬会把还没处理的数据覆盖掉。删除时前面的元素要往前挪必须从前往后循环。public class MyArrayList { private int[] data; private int size; public MyArrayList() { this.data new int[10]; this.size 0; } public void add(int index, int element) { if (index 0 || index size) { throw new IndexOutOfBoundsException(插入位置不合法); } if (size data.length) { int[] newData new int[data.length * 2]; System.arraycopy(data, 0, newData, 0, size); data newData; } for (int i size; i index; i--) { data[i] data[i - 1]; } data[index] element; size; } public void addLast(int element) { add(size, element); } public int remove(int index) { if (index 0 || index size) { throw new IndexOutOfBoundsException(删除位置不合法); } int removedValue data[index]; for (int i index; i size - 1; i) { data[i] data[i 1]; } data[size - 1] 0; size--; return removedValue; } public void set(int index, int element) { if (index 0 || index size) { throw new IndexOutOfBoundsException(修改位置不合法); } data[index] element; } public int get(int index) { if (index 0 || index size) { throw new IndexOutOfBoundsException(查询位置不合法); } return data[index]; } public void print() { System.out.print([); for (int i 0; i size; i) { System.out.print(data[i]); if (i size - 1) System.out.print(, ); } System.out.println(]有效长度 size); } }数组和链表是数据结构里最基础的两种结构数组偏重查询链表偏重增删。把数组的增删改查写一遍边界条件处理清楚了后面学其他结构会顺手很多。

相关新闻

3步快速汉化Axure RP:为中文用户打造无障碍原型设计体验

3步快速汉化Axure RP:为中文用户打造无障碍原型设计体验

3步快速汉化Axure RP:为中文用户打造无障碍原型设计体验 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure…

2026/7/30 15:28:43 阅读更多 →
如何用1个工具在100个Excel文件中秒级定位目标数据?

如何用1个工具在100个Excel文件中秒级定位目标数据?

如何用1个工具在100个Excel文件中秒级定位目标数据? 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 面对海量Excel文件中的数据检索需求,传统的手工搜索方式已无法满足现代数据…

2026/7/30 15:28:42 阅读更多 →
小儿体质调理,助孩子养出好体质

小儿体质调理,助孩子养出好体质

养娃路上,最让家长操心的,莫过于孩子的日常体质问题。很多小朋友常年体质偏弱,容易出现挑食厌食、积食腹胀、睡眠不安、精神状态差等情况,换季时更是容易身体不适。 看着孩子小脸蜡黄、身形单薄,频繁出现各类小毛病&am…

2026/7/30 15:27:42 阅读更多 →

最新新闻

2026年应届本科生论文降AI攻略:本科毕业论文AIGC超标免费4.8元快速达标完整处理方案

2026年应届本科生论文降AI攻略:本科毕业论文AIGC超标免费4.8元快速达标完整处理方案

2026年应届本科生论文降AI攻略:本科毕业论文AIGC超标免费4.8元快速达标完整处理方案 应届本科生论文降AI这件事,工具选错、操作错,钱白花还耽误时间。 直接给结论:嘎嘎降AI(www.aigcleaner.com)&#xff…

2026/7/30 15:37:46 阅读更多 →
2025八字起名网站专业度排名

2025八字起名网站专业度排名

专业度NO.1:美名助运 国学智能起名网非AI起名, 而是美名助运, 其讲究全局平衡, 另有生态、世态、心态三种分析维度为其独创, 它既查看孩子命理, 又顾及其读书、社交等实际使用场景未来情况, 诸多家长认定它所给名字于孩子一生而言更契合。专业度NO.2:起名网 带有兼具重名率查询…

2026/7/30 15:37:46 阅读更多 →
PDF批量处理利器:5大核心技术深度解析与实战应用

PDF批量处理利器:5大核心技术深度解析与实战应用

PDF批量处理利器:5大核心技术深度解析与实战应用 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https://gitcode…

2026/7/30 15:37:46 阅读更多 →
Python取整函数全解析:int、floor、ceil、round与//的实战指南

Python取整函数全解析:int、floor、ceil、round与//的实战指南

1. 项目概述:为什么Python取整值得深究? 刚接触Python那会儿,我也觉得取整不就是个 int() 的事儿吗?直到后来在写财务对账脚本时,因为四舍五入的规则没搞对,差点儿出了大篓子;在做分页计算时&…

2026/7/30 15:37:46 阅读更多 →
Obsidian Pandoc插件:从笔记到专业文档的一键转换终极指南

Obsidian Pandoc插件:从笔记到专业文档的一键转换终极指南

Obsidian Pandoc插件:从笔记到专业文档的一键转换终极指南 【免费下载链接】obsidian-pandoc Pandoc document export plugin for Obsidian (https://obsidian.md) 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-pandoc 你是否在Obsidian中积累了宝…

2026/7/30 15:36:46 阅读更多 →
Total Registry:Windows注册表编辑器的终极替代方案完整指南

Total Registry:Windows注册表编辑器的终极替代方案完整指南

Total Registry:Windows注册表编辑器的终极替代方案完整指南 【免费下载链接】TotalRegistry Total Registry - enhanced Registry editor/viewer 项目地址: https://gitcode.com/gh_mirrors/to/TotalRegistry 你是否曾为Windows自带的Regedit编辑器功能有限…

2026/7/30 15:36:46 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻