旋转数组
扩展阅读
对一个排序的数组进行旋转, 我们可以注意到数组变成两个排序的子数组,并且前一个子数组的所有元素都大于后一个元素的子数组。 并且我们要查找的值,正是这两个数组的分界线。 采用二分法,我们可以判断中间元素是在前一个排序的子数组还是后一个子数组。扩展阅读
链表环问题 你需要明白,
- 如果两个快指针最慢指针, 其快指针一定会追上的慢指针。
- 如果快指针的速度为2, 慢指针的速度为1, 如果快慢指针距离为N, 那么在追上慢指针, 其中快指针走了2N, 慢指针走了N。
- [对称二叉树]problem/对称二叉树.go)
扩展说明
主要操作:
- 判断两个点是否在一个同一个集合里面
- 合并两个集合(problem/merge) 其中判断两个节点的根节点相同,那么两个节点一定是在同一个节点上。
- 先排序,然后用两个指针,一个指向头部, 一个指向尾部, 判断是否有两个和为sum
- hash 表
- 如果 sum 不大, 可以开一个sum数组, 来统计。
- 先排序,然后输出第k大的数。
- 快排, 对数据快速的分堆,然后根据堆的数量,递归的访问另一堆。
- 二分搜索, 如果知道数组的最大和最小值, 可以二分搜索[min, max]
- 堆排序,寻找第k大的数,适用于海量数据。
- 键值索引法, 当 数组的数不大时, 可以统计每个数出现的次数,寻找k大值。