基本知識點
複雜度對比
執行次數 | 複雜度 | 非正式術語 |
---|---|---|
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)
- 隊列是一種特殊的線性表,只能在頭尾兩端進行操作
- 隊尾:添加元素
- 隊頭:移除元素
- 先進先出