面试中常见的图论问题

图论法求解经典面试题:NxN匹马,N个赛道,求最快前M匹马,至少需要几次比赛? 相信不少朋友都听说过这道经典面试题 NxN匹马,每匹马速度恒定且均不同,有N个赛道,每次比赛一次就可以知道这N个赛道的每匹马,那匹快、那匹慢,请问我要求最快的前M匹马,至少需要进行几次比赛? (不允许记录每匹马的速度,只能通过多次比较来确认) 具体来说,N,M有以下几种常见的情况 N=4,M=4,即16匹马,4个赛道,求前4名,最少进行几次比赛? N=5,M=5,即25匹马,5个赛道,求前5名,最少进行几次比赛? N=8,M=4,即64匹马,8个赛道,求前4名,最少进行几次比赛? N=9,M=4,即81 阅读详情

面试中常见的图论问题

文章目录

二分图问题:

LeetCode 785. Is Graph Bipartite?

这是一个直白的二分图问题:二分图问题,就是可否将图的所有节点分成两个集合,有连边两个点不在一个集合。

将二分图问题可以看成二染色问题,即使用两种颜色对图进行染色,相连的两个点,颜色不能相同。

解决办法:遍历染色

DFS+染色:

class Solution {
   
   
    public boolean isBipartite(int[][] graph) {
   
   
        // 染色状态; 0-未染色,1-蓝色,-1-红色
        int[] colors = new int[graph.length];
        for (int i = 0; i < colors.length; i++) {
   
   
            if(colors[i]==0 && !dfs(i, 1, colors, graph)){
   
   
                return false;
            }
        }
        return true;
    }
    private boolean dfs(int v, int color, int[] colors, int[][] graph) {
   
   
        colors[v]=color;
        for(int adjV:graph[v]){
   
   
            if(colors[adjV]==color) return false;
            if(colors[adjV]==0 && !dfs(adjV, -color, colors, graph)){
   
   
                return false;
            }
        }
        return true;
    }
}

也可以BFS+染色:

public class Solution {
   
   
    public boolean isBipartite(int[][] graph) {
   
   
        // 染色状态; 0-未染色,1-蓝色,-1-红色
        int[] colors = new int[graph.length];
        for (int i = 0; i < colors.length; i++) {
   
   
            if(colors[i]==0 && graph[i].length>0){
   
   
                colors[i] = 1;
                Queue<Integer> q = new LinkedList<>();
                q.offer(i);
                while(!q.isEmpty()){
   
   
                    int curr = q.poll();
                    for(int adjV:graph[curr]){
   
   
                        if(colors[adjV]==0){
   
   
                            colors[adjV]=-colors[curr];
                            q.offer(adjV);
                        }
                        else if(colors[adjV]==colors[curr]) return false;
                    }
                }
            }
        }
        return true;
    }
}

886. Possible Bipartition

这道题加了点丰富的背景,但是很容易看出来还是一个二分图问题。据说这道题是今年字节跳动的笔试题

多了一点构建图。

DFS+染色:

public class Solution {
   
   
    public boolean possibleBipartition(int N, int[][] dislikes) {
   
   
        // 构建图
        List<Integer>[] graph = new ArrayList[N+1];
        
【数据结构】适用于面试的55项题 【数据结构】适用于面试题答案汇总(55项) 阅读详情

相关推荐

Java面试中的算法题:从易到难,逐个击破

Java面试中的算法题解析:从基础到进阶 摘要:本文针对Java开发岗位面试中的算法考察需求,系统梳理了从简单到复杂的常见算法题型。基础部分涵盖数组操作(两数之和)和字符串处理(反转字符串);中级部分包括链表反转和二叉树遍历;高级部分则涉及动态规划解决方案(最长递增子序列)。每种算法均提供完整的Java代码实现示例,包含迭代和递归两种解法,并配有详细注释和测试用例。文章旨在帮助面试者系统掌握Java算法解题技巧,提升面试表现,通过实际问题展示如何有效运用数据结构和算法思想。

博客 1253

力扣高频|算法面试题汇总(十):图论

力扣高频|算法面试题汇总(十):图论 力扣链接 目录: 1.单词接龙 1.单词接龙 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典中的单词。 说明: 如果不存在这样的转换序列,返回 0。 所有单词具有相同的长度。 所有单词只由小写字母组成。 字典中不存在重复的单词。 你可以假设 beginWord 和 endWord 是非空的,且二者

qq_24739717的博客 2467

Java面试算法实践:interview-algorithms-java项目详解

本文还有配套的精品资源,点击获取 简介:Java面试中,算法是考核开发者编程、逻辑思维和问题解决能力的关键。"interview-algorithms-java"项目针对Java开发者,提供多种算法实现,帮助解决编程面试题。内容涵盖基础数据结构、排序与查找算法、递归与分治、动态规划、图论、字符串处理、堆数据结构、滑动窗口问题、贪心算法和回溯法等。熟悉这些算法和数据结构对Ja...

weixin_34268462的博客 939

面试常考算法解题技巧

面试常考算法解题技巧进行讲解和分析,会讲解一些常用的数据结构,锻炼算法的思考方式,帮助在大厂面试过程如鱼得水。

图论相关的面试题精讲(待更新)

例一:遍历序列 给定二叉树前、中序遍历,构造二叉树 (Leetcode 105) [分析]: 前序遍历序列第一个是根节点x; 从中序遍历序列中找到根节点x; 中序遍历中x的左边序列对应等长的前序遍历序列为二叉树的左子树; 中序遍历中x的右边序列对应等长的前序遍历序列为二叉树的右子树。 #include <iostream> #include <vector> using n...

weixin_43933310的博客 516

实习面试算法准备之图论

这个 onPath 数组的操作很像前文 回溯算法核心套路 中做「做选择」和「撤销选择」,区别在于位置:回溯算法的「做选择」和「撤销选择」在 for 循环里面,而对 onPath 数组的操作在 for 循环外面。说了这么多 onPath 数组,再说下 visited 数组,其目的很明显了,由于图可能含有环,visited 数组就是防止递归重复遍历同一个节点进入死循环的。,你从图的某一个节点开始遍历,有可能走了一圈又回到这个节点,而树不会出现这种情况,从某个节点出发必然走到叶子节点,绝不可能回到它自身。

lihao1875699404的博客 1729

tech-interview-for-developer:算法面试终极指南-从排序到图论全覆盖

算法面试是技术面试中的重中之重,本文将从基础排序算法到高级图论算法,为你提供全面的面试准备指南。 ## ???? 算法复杂度速查表 | 算法分类 | 时间复杂度 | 空间复杂度 | 稳定性 | 适用场景 | |---------|-----------|-----------|--------|---------| | 冒泡排序 | O(n²) | O(1) | 稳定 | 小规模数据 | | 选择...

gitblog_00676的博客 1170

常见的算法

//冒泡排序 import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { int arr[]={3,9,-1,10,-2}; // int arr[]={-2,-1,3,9,10}; //第一趟排序,就是将最大的...

winnertakeall的博客 590

记录刷题中遇到的知识点方便复习(十七)(图论)(BFS)(DFS)

做了一些笔试,都是要求自己写输入输出,之后练习以ACM模式为主,因为不熟悉代码,导致第一次笔试写的超级慢,要超级多的练习才行。今天是图论部分要把(BFS)和(DFS)彻底弄明白在二叉树里面已经学习过两种搜索方式的思想,对于图来说也是类似的先说算法参考:可以用队列的方式实现可以用递归或者栈实现2.1 递归2.2 栈。。。光看代码还有理解原理不够,要在大量题目中应用才能真正掌握,吃了太多没有足够练习的亏。。

weixin_48703074的博客 919

《 C++ 修炼全景指南:二十四 》彻底攻克图论!轻松解锁最短路径、生成树与高效图算法

本篇博客系统地介绍了图论的核心内容,深入探讨图的基本概念、存储结构和遍历方法,详细分析了经典的最短路径算法(Dijkstra、Bellman-Ford、Floyd-Warshall)及其适用场景。博客进一步介绍了拓扑排序、连通性检测等基础算法,结合实际应用如任务调度和网络连通分析,为读者提供了清晰的学习路径。在高级算法方面,涵盖了网络流问题(最大流与最小割)、图着色、哈密顿与欧拉路径、NP问题等复杂主题,并探索了大规模图处理与算法优化。实际应用案例展示了图论在通信、交通、社交网络等领域的应用。最后,博客总结

Lenyiin 7568

最全面的蓝桥杯常考知识点总结(Python)|冲国赛

本篇文章内容充实 文字量较大 每一个知识点都会附带有模版题以供练习 并有详细注释若能基本掌握 稳稳拿省一~😎~如遇我解释不清楚的地方 欢迎私信我 我会耐心解答呀目录动态规划01背包完全背包多重背包01背包最大价值方案数完全背包填满背包的方案数最长上升子序列最长公共子串最长公共子序列最长公共上升子序列最长上升子序列和最长回文子串最长回文子序列二分检测是否最大满足检测是否最小满足全排列下一个全排列N个字符/数字的全排列N个字符选K个字符的组合 求组合数 快速幂筛素数唯一分解定理最大公约数与最小公倍数图论建图方.

KS的博客 1万+

图论面试题精讲

本篇博客是关于七月算法 ,曹鹏老师所讲的关于图论部分的习题,加上自己的补充与笔记! //给定二叉树的前序和中序遍历,构造二叉树  leetcode105、106  //二叉树每个节点有一个整数,返回和最大的路径   leetcode124 //二叉树最小深度 ,注意空子树      leetcode111 //判断二叉树平衡 leetcode110  //最大深度 lee

王小东大将军的博客 1553

1437 图论面试题

描述 给出一个无环的有向图,现在请你求出从这个图的某点出发,到其余顶点不同路径的条数。 自身到自身算1条,但A->B->B与A->B是同一条。 输入 输入第一行为一个整数T,表示以下有T组测试数据。 每组数据的第一行给出一个整数N,表示有N个顶点,以下N行N列以矩阵形式给出该有向图。 输出 每次一行,包括N个数,输出从顶点1(顶点编号1到N)到其它点的路径数 样例输入

无知的我 3499

数据结构-图论复习【附带常问面试题

本文总结了图论在保研面试和机试中的核心知识点,主要包括: 图的存储方式:邻接矩阵(适合稠密图,查询快但空间复杂度高)和邻接表(适合稀疏图,空间效率高但查询慢) DFS与BFS: DFS使用栈/递归实现,适合深度探索和回溯问题 BFS使用队列实现,适合最短路径和层次遍历问题 拓扑排序:用于有向无环图的节点排序,解决任务调度等问题 并查集: 包含find和merge操作 优化方法:路径压缩和按秩合并 最短路径算法: Kruskal/Prim算法(最小生成树) Dijkstra算法(单源最短路径) Floyd算法

2302_79714514的博客 419

运筹学——图论与最短距离(Python实现)(3),2024年最新2024阿里Python高级面试题总结

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费。

m0_60575487的博客 1206

图形学面试题总结

搜集到的一些图形学方向的面试问题,引擎开发相关的

qq_46348003的博客 2319

全网最全Unity面试题加强版之八《图形学相关》

Unity面试题加强版之八unity与图形学 unity面试独家秘笈,码住学习,掌握轻轻松松拿Offer。 220.简述四元数的作用,四元数对欧拉角的优点? 四元数用于表示旋转 A.四元数一般定义如下:q=w+xi+yj+zk 其中 w,x,y,z 是实数。同时,有: ii=-1 jj=-1 k*k=-1 B.四元数也可以表示为:q=[w,v] 有多种方式可表示旋转,如 axis/angle、欧拉角(Euler angles)、矩阵(matrix)、四元组等。 相对于其它方法,四元组有其本身的优点: a.四

他在试图用代码书写这个世界,字里行间温柔尽显。勿忘初心,努力做有价值的技术文章。 2062
上一篇: 命名实体识别学习-从基础算法开始(02)lstm+crf序列标注
下一篇: 命名实体识别学习-数据集介绍-conll03
StarLib
博客等级 码龄8年 31粉丝 23原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值