首页 > 编程语言 >常用算法模板

常用算法模板

时间:2023-01-15 14:24:33浏览次数:41  
标签:常用 right int mid 算法 作者 节点 模板 left

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

相关文章

  • 简单分支使用(git常用命令)
    之前测试库使用人数不多,1个主分支就能解决,最近有关于多分支的操作,复习了下创建分支1、创建新分支gitbranch[branch-name]2、新建分支并切换到该分支gitcheckout-b......
  • 第四节:常用uni-ui组件剖析(uni-forms)
    一. uni-froms剖析       二.xxx       三.xxx        !作       者:Yaopengfei(姚鹏飞)博客地址:......
  • 【数据结构与算法】二分查找算法(C++实现)
    两种写法,取决于划分规则。这两种写法是学的yxc的,至此以后,写二分查找再也不含糊了!yxc的分享在此:二分查找算法模板第一种写法:boolbinarySearch(vector<int>&nums,int......
  • P1886 滑动窗口 /【模板】单调队列
    滑动窗口/【模板】单调队列题目描述有一个长为\(n\)的序列\(a\),以及一个大小为\(k\)的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的......
  • 算法--2023.1.15
    1.力扣198--打家劫舍classSolution{publicintrob(int[]nums){intn=nums.length;int[]dp=newint[n+1];dp[0]=0;......
  • 算法刷题 Day 16 | 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点
    今日内容:二叉树的最大深度559.n叉树的最大深度二叉树的最小深度完全二叉树的节点个数迭代法,大家可以直接过,二刷有精力的时候再去掌握迭代法。详细布置104......
  • (11)go-micro微服务雪花算法
    目录一雪花算法介绍二雪花算法优缺点三雪花算法实现四最后一雪花算法介绍雪花算法是推特开源的分布式ID生成算法,用于在不同的机器上生成唯一的ID的算法。该算法生......
  • 常用PC,移动浏览器User-Agent大全
    常用PC,移动浏览器User-Agent大全,提供PC浏览器user-agent,Android手机浏览器user-agent大全PC端User-AgentIE9.0IE8.0IE7.0IE6.0Firefox4.0.1–MACFirefox4.0.1–Win......
  • 遗传算法
    概述遗传算法是一种模拟演化的近似算法。顾名思义,它模拟大量的样本,周期性地繁衍、遗传、变异、筛选。“状态”有时在遗传算法中是对象的一个属性。思路周期......
  • 近似算法
    概述现实是复杂而困难的。很多问题是NP的。同样很多的问题我们连它们是不是NP都不知道。更多的问题我们甚至无法把它归约到某种逻辑学的形式上,更无从谈起......