Myth

Results 100 comments of Myth

## 最短路径 ### 单源最短路径 - Dijkstra算法(单源,无负权)(朴素、堆优化版) - Bellman-Ford算法(单源,可以判断负权回路)(队列优化:SPFA) - Floyd算法(多源,无负权), ![Fig-11](https://user-images.githubusercontent.com/19643013/67555628-3d4ffd80-f744-11e9-9ce3-2eac2ca3fc9b.jpg)

## 并查集 并查集是搞连通性问题的,而连通性问题一般都可以通过DFS,BFS去解决,当然并查集的效率会更高些 并查集本质上就是一个染色的过程

## dummy node 头部设置哑指针 `dummy node`, 这样就不用在循环中每次判断头节点是否为空(边界检查问题),也就是说每个节点都有 `pre` 节点

## 指针的操作 - 链表的指针移动 - 头插和尾部插入 - 指针的删除 重要的点: 1. 遍历指针 `p` 的边界判断 使用`p != null` 或 `p.next != null` 2. 封尾操作,遍历完,是不是需要对尾部进行特殊操作

## 链表的拆分 ```Java ListNode p = head, q = head.next; ListNode evenHead = head.next; while (p.next != null && p.next.next != null) { p.next = p.next.next; q.next = q.next.next; p...

## 快慢指针 - 判断是否有环 - 判断环的第一个入口地址 - 判断相交节点的第一个交叉点

## Merge 链表的归并(递归写法)

# 二分查找的思想和模板 ![image](https://user-images.githubusercontent.com/19643013/63819405-ca125100-c977-11e9-8e00-b9cb0bd5d8e2.png) **思想**:有序(数组有序、范围的潜在有序)、找边界(**临界点**)、(尝) 试每次取到的mid(g函数的设计) 区间左闭右 `[start, end )` 开模板 ```Java int start = 0, end = length - 1; while(start < end) { mid = start + (end -...

## 两种搜索方式 (数组的) 索引搜索 和 (范围的) 值搜索 ### 索引搜索 - 注意不要越界(一般end初始为len-1不会越界) - 注意最终返回的start,如何去使用它(start = 0 时,start = len-1时) ### 值搜索 - 值搜索一般是知道一个范围,在这个范围内进行二分搜索 - 一般搜索是在整数范围内,如果是浮点数的话,一般使用while(true)循环,然后在循环内部设置出口,这时候边界 缩小边界的时候, 使用 start=m,end=m进行缩小

## 如何利用边界 找不到的情况?越界问题? **例** (一个非常好的题目) 寻找有序数组中,比val值小的数的个数,注意val不一定在数组中,并且数组中可能含有重复元素 ```Java public int findKSmallest(int[] nums, int val) { if (nums.length == 0) return 0; int l = 0, r = nums.length-1, m; while (l...