1、数组
构建简单、索引简单O(1)
需要一段连续的空间、check某元素存在与否要O(n)时间复杂度
一些问题:
https://leetcode-cn.com/problems/valid-anagram/
2、链表
灵活分配空间、增删时间复杂度O(1)、适用于数据个数不定算法中进场添加删除等
查询元素O(n)
一些问题:
https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ (K 个一组翻转链表)
3、栈
后进先出(LIFO)、所有操作都在栈顶完成、可用一个单链表实现(在链表头操作)
适用于只关心上一次操作的情况
一些问题:
(有效的括号)https://leetcode-cn.com/problems/valid-parentheses/
(每日温度) https://leetcode-cn.com/problems/daily-temperatures/
4、队列
先进先出(FIFO)、队尾加入队头删除、可用双链表实现
适用于按照一定顺序处理数据,且数据在不断变换。
广度优先搜索
双端队列
适用于实现一个长度动态变化的窗口
一些问题:
239. 滑动窗口最大值
5、树
递归
普通二叉树、平衡二叉树、完全二叉树、二叉搜索树、四叉树、多叉树
红黑树、自平衡二叉树
树的遍历(前、中[二叉搜索树常用]、后)
二叉搜索树:节点值比左孩子大比又孩子小
一些问题: