排序
查找
概述
查找的种类
1. 二分查找
2. hash查找
3. 树查找
4. 图查找
查找涉及的数据结构
二分查找
|
|
查找LeetCode的练习题:
- 对撞指针
- No.125 Valid Palindrome
- No.344 Reverse String
- No.345 Reverse Vowels of a string
- No.11 Container with Most water
- 滑动窗口
- No.438 Find All Anagrams in a String
- No.76 Minimum Window Substring
hash查找
set(集合)处理存在的问题
map(字典)处理查找的问题
STL | 底层实现 | 时间复杂度 |
---|---|---|
map, set | 平衡二叉树 | O(log(n)) |
unordered_map, unordered_set | 哈希表 | O(1) |
LeetCode练习题:
- No.242 Valid Anagram
- No.202 Happy Number
- No.290 Word Pattern
- No.205 Isomorphic Strings
- No.451 Sort Characters By Frequency
- No.15 3Sum
- No.18 4Sum
- No.16 3Sum Closest
- No.49 Group Anagrams
- No.447 Number of Boomerangs
- No.149 Max Points on a Line
树的遍历
深度优先遍历,一般考虑使用递归或者使用栈。
递归版本
|
|
非递归版本
版本1
|
|
版本2
|
|
栈LeetCode的练习题:
- No.150 Evaluate Reverse Polish Notation
- No.11 Simplify Path
图的遍历
广度优先遍历,考虑使用队列
- 层序遍历
- 无权图的最短路径
层序遍历
|
|
层序遍历LeetCode练习题:
- No.107 Binary Tree Level Order Traversal II
- No.103 Binary Tree ZigZag Level Order Traversal
- No.199 Binary Tree Right Side View
无权图最短路径
以LeetCode的279题“Perfect Sqaure”为例,将问题转化为无权图路径问题
无权图LeetCode练习:
- No.127 World Ladder
- No.126 World Ladder II
优先队列
和普通队列,栈相比
- 不同:不是从线性结构的头或尾出数据
- 同:是一种广义的队列,出最大的数或者最小的数
- 实现方式:堆
- c++容器:
priority_queue
优先队列实验
|
|
结果:
LeetCode 347. Top K Frequent Elements
给定一个非空数组,返回前k个出现频率最高的元素
|
|
优先队列练习
- No. 23. Merge k Sorted Lists