本篇文章是数据结构与算法概述,旨在归纳一些比较重要的概念、思想和方法,以为刷题做准备。因为是个人经验的总结,所以会不定时更新。
一、线性结构和非线性结构
- 线性结构:数据元素之间存在一对一的线性关系
- 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。
- 顺序表中的存储元素是连续的;链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
- 线性结构常见的有:数组、队列、链表和栈。
- 非线性结构包括:二维数组,多维数组,广义表,树结构,图结构
二、时间复杂度
1、什么是时间复杂度
- 算法的执行效率
- 算法的执行时间与算法的输入值之间的关系
2、常见的时间复杂度
- O(1):没有循环
- O(logN):while循环(二分查找)
- O(N):for循环
- O(M+N):两个for循环并列
- O(M* logN):for循环里面有while循环(排序)
- O(N^2):嵌套for循环
三、空间复杂度
1、什么是空间复杂度?
算法的存储空间与输入值之间的关系(找变量)
如果变量 = 常量,就是O(1)
如果变量的存储涉及到Array、List、Map、Queue、Stack,空间就会随着nums的改变而改变
2、常见的空间复杂度
- O(1)
- O(N)