BFS
单向BFS
不记录层数
while queue 不空:
cur = queue.pop()
for 节点 in cur的所有相邻节点:
if 该节点有效且未访问过:
queue.push(该节点)
作者:负雪明烛
链接:https://leetcode.cn/problems/01-matrix/solutions/203364/tao-lu-da-jie-mi-gao-dong-ti-mu-kao-cha-shi-yao-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
记录层数
level = 0
while queue 不空:
size = queue.size()
while (size --) {
cur = queue.pop()
for 节点 in cur的所有相邻节点:
if 该节点有效且未被访问过:
queue.push(该节点)
}
level ++;
作者:负雪明烛
链接:https://leetcode.cn/problems/01-matrix/solutions/203364/tao-lu-da-jie-mi-gao-dong-ti-mu-kao-cha-shi-yao-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
双向BFS
// d1、d2 为两个方向的队列
// m1、m2 为两个方向的哈希表,记录每个节点距离起点的
// 只有两个队列都不空,才有必要继续往下搜索
// 如果其中一个队列空了,说明从某个方向搜到底都搜不到该方向的目标节点
while(!d1.isEmpty() && !d2.isEmpty()) {
if (d1.size() < d2.size()) {
update(d1, m1, m2);
} else {
update(d2, m2, m1);
}
}
// update 为将当前队列 d 中包含的元素取出,进行「一次完整扩展」的逻辑(按层拓展)
void update(Deque d, Map cur, Map other) {}
作者:宫水三叶
链接:https://leetcode.cn/problems/word-ladder/solutions/831894/gong-shui-san-xie-ru-he-shi-yong-shuang-magjd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
二分搜索
int bsearch_1(int left, int right)
{
while (left < right)
{
int mid = (right - left) / 2 + left;
if (check(mid)) right = mid;
else left = mid + 1;
}
return left;
}
作者:林小鹿
链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/solutions/955576/tu-jie-er-fen-zui-qing-xi-yi-dong-de-jia-ddvc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
int bsearch_2(int left, int right)
{
while (left < right)
{
int mid = (right - left + 1) / 2 + left;
if (check(mid)) left = mid;
else right = mid - 1;
}
return left;
}
作者:林小鹿
链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/solutions/955576/tu-jie-er-fen-zui-qing-xi-yi-dong-de-jia-ddvc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
标签:常用,right,int,mid,算法,作者,节点,模板,left
From: https://www.cnblogs.com/shixuanliu/p/17053413.html