基本知识点
复杂度对比
执行次数 | 复杂度 | 非正式术语 |
---|---|---|
12 | O(1) | 常数阶 |
2n+1 | O(n) | 线性阶 |
2n^2+2n+1 | O(n^2) | 平方阶 |
2log2n+1 | O(logN) | 对数阶 |
n3+n2+n+100 | O(n^3) | 立方阶 |
2^n | O(2^n) | 指数阶 |
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
算法优化方向
- 时间换空间
- 空间换时间
数组(Array)
- 数组是一种顺序存储的线性表,所有元素的内存地址是连续的
- 数组的容量不可以动态修改,因此有了动态数组
- 堆空间
int[] array = new int[]{11,22,33};
内存地址|内存空间
-|-
0x1110|11
0x1111|22
0x1112|33
链表(Linked List)
- 链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的
- 双向链表、两个节点之间头尾相连
栈(Stack)
- 栈是一种特殊的线性表,只能在一端进行操作
- 先进后出远,后进先出
队列(Queue)
- 队列是一种特殊的线性表,只能在头尾两端进行操作
- 队尾:添加元素
- 队头:移除元素
- 先进先出