- 这个得多练习。我的经验是自己实现常见数据结构(练控制细节的能力,不抄代码,自己根据原理写,少调试),然后是分门别类刷题(练熟练度)。
- 经典结构,例如实现双向链表,操作包括插入,查询,删除。然后封装一下实现栈,队列。还有优先级队列(堆的实现),各种排序算法实现(重点有快排,归并,堆排,顺便熟悉递归)。二叉树树的遍历方式(前中后,考虑递归非递归,熟悉栈的模拟)。全排列(递归非递归,掌握回朔)。哈希表实现。
- 刷题除了一些专门的算法技巧例如DP,很多都是和基础数据结构的熟练度有很大关系。可以分类别(可以参考网上分类),做题要争取一次bugfree,宁跳过不要看答案(除了学算法课程这种,做题不要这样),一个月内密集刷个一两百题,就应该有不错的熟练度。
leetcode 数据结构经典题
- Recursion / Backtracking
- Graph Traversal - DFS, BFS, Topological Sorting
- 133. Clone Graph (BFS / DFS)
- 127. Word Ladder (BFS)
490. The Maze
- 210. Course Schedule II (Topological Sorting)
269. Alien Dictionary
(Topological Sorting)
- Binary Tree / Binary Search Tree (BST)
- Binary Search
- Data Structure
- 242. Valid Anagram (Hash Table)
- 133. Clone Graph (Hash Table)
- 127. Word Ladder (Hash Table)
- 155. Min Stack (Stack)
- 225. Implement Stack using Queues (Stack / Queue)
- 215. Kth Largest Element in an Array (PriorityQueue)
- 23. Merge k Sorted Lists (PriorityQueue)
- Linked List Manipulation
- Pointer Manipulation
- Sorting
- Time – O(N log N)
- Merge Sort – Space O(N)
- Quick Sort
- 148. Sort List
- Convert Real Life Problem to Code
- 146. LRU Cache
1066. Compus Bike
490. The Maze
- Time Space Complexity
- 一般面试的时候 你说完算法 就要说 这个算法的 time / space complexity是什么
- 每次你做完一道题 给自己养成一个习惯 就是想一下他的时间空间复杂度是多少
二叉树专题
二叉树遍历
深度优先遍历中(递归|迭代): 中在什么位置即为 什么排序;左永远在右前;
- 前序:中左右
- 中序:左中右
- 后续:左右中 广度优先遍历:层次遍历(迭代)
递归为什么还能退回父节点?
https://www.zhihu.com/question/58529163
递归三要素
- 确定递归函数参数和返回值;
- 确定终止条件;
- 确认单层递归的逻辑;