參考
https://cloud.tencent.com/developer/ask/112047
https://blog.csdn.net/chao2016/article/details/82425317
詳細解析
數組
- 設置,在特定索引處檢查元素:O(1)
- 搜索:O(n)數組是否未排序,O(log n)如果數組排序並使用類似於二分搜索的東西,
Delete
陣列中沒有可用的操作。根據我們的要求,我們可以通過將其設置為某個特定值來象征性地刪除元素,例如-1,0等- 同樣,
Insert
對於數組基本上Set
是在開始時提到的
數組列表:
- 添加:攤銷O(1)
- 刪除:O(n)
- 包含:O(n)
- 尺寸:O(1)
鏈接列表:
- 插入:O(1),如果在頭部完成,則O(n)在其他任何地方,因為我們必須線性移動鏈表到達該位置。
- 刪除:O(1),如果在頭部完成,則O(n)在其他任何地方,因為我們必須線性移動鏈表到達該位置。
- 正在搜索:O(n)
雙鏈表:
- 插入:如果在頭部或尾部完成,則O(1),O(n)如果在其他任何地方,因為我們必須線性移動鏈表到達該位置。
- 刪除:O(1),如果在頭部或尾部完成,則O(n)在其他任何地方完成,因為我們必須線性移動鏈表到達該位置。
- 正在搜索:O(n)
堆棧:
- 推:O(1)
- Pop:O(1)
- 上:O(1)
- 搜索(像查找,像一個特殊的操作):O(n)(我猜是這樣)
隊列/ Deque /循環隊列:
- 插入:O(1)
- 刪除:O(1)
- 尺寸:O(1)
二進制搜索樹:
- 插入,刪除和搜索:平均情況:O(log n),最差情況:O(n)
紅黑樹:
- 插入,刪除和搜索:平均情況:O(log n),最差情況:O(log n)
堆/ PriorityQueue(最小/最大):
- 查找最小值/查找最大值:O(1)
- 插入:O(log n)
- 刪除最小值/刪除最大值:O(log n)
- 提取最小/提取最大值:O(log n)
- 查找,刪除(如果有的話):O(n),我們將不得不掃描所有的元素,因為它們沒有像BST那樣排序
HashMap中/Hashtable/ HashSet的:
- 插入/刪除:O(1)
- 重新大小/散列:O(n)
- 包含:O(1)