时间复杂度
推算时间复杂度:
1.统计操作数量
忽略常数项,忽略所有系数,循环嵌套时使用乘法
2.判断渐进上界
时间复杂度由最高阶决定
常数阶<对数阶<线性阶<线性对数阶<平方阶<指数阶<阶乘阶
线性阶:单层循环(遍历数组,遍历链表等)
平方阶:嵌套循环
指数阶:常存在与递归函数中
线性对数阶:二叉树,快速排序,归并排序,堆排序
阶乘阶
空间复杂度:占用内存空间
一般只关注最差空间复杂度
1.以最差输入数据为主
当n<10时,空间复杂度为O(1);但当n>10时,初始化的数组nums占用O(n)空间,因此最差空间复杂度为O(n)
2.以算法运行中的峰值内存为准
初始化的数组nums占用O(n)空间,因此最差空间复杂度为O(n)
常数阶:O(1)
对数阶:O(n)
线性阶:O(n^2)
线性对数阶:O(2^n)
对数阶:O(logn)
数据结构
逻辑结构
揭示了数据元素之间的逻辑关系。
线性数据结构:数组,链表,栈,队列,哈希表,元素之间是一对一的顺序关系
非线性数据结构:树,堆,图,哈希表
树形结构:树,堆,哈希表,元素之间是一对多的关系
网状结构:图,元素之间是多对多关系
物理结构:连续与分散
连续空间存储(数组)
分散空间存储(链表)
所有数据结构都是基于数组,链表或二者的组合实现的。
基于数组可实现:栈,队列,哈希表,树,堆,图,矩阵,张量(维度大于等于三)等
基于链表可实现:栈,队列,哈希表,树,堆,图等。
基本数据类型
整数类型:byte,short,int(2^8),long
浮点数:float,double
字符类型:char
布尔类型;bool