摘要:
给定一组 N 人(编号为 1, 2, ..., N), 我们想把每个人分进任意大小的两组。 每个人都可能不喜欢其他人,那么他们不应该属于同一组。 形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。 当可以用这种方法将每个人分进两组时,返回 tru 阅读全文
摘要:
主要利用快慢指针来解答,可以判断链表中是否有环,也可以找出链表中环的入口。 (1)判断链表中是否有环 新建两个指针,一快一慢,开始都指向头结点,一般快指针的速度是慢指针的两倍。这样如果快慢指针相遇,那么链表中一定有环。 (2)找出环的入口 同样用快慢指针处理,不过处理方式有所改变。当第一次快慢指针相 阅读全文
摘要:
判断图是否连通,可用dfs和bfs遍历图算法,注意点数目较多,又是稀疏图的话,最后使用邻接表的方法存储。另外推荐采用的是并查集的方法。初始化时将每个节点看作一个集合,则每给出一条边即把两个集合合并。最后遍历所有点,有几个集合便有几个连通分量,若只有一个集合说明图连通。并查集方法通常情况下时间效率较高 阅读全文
摘要:
1.DFS 深度优先搜索在搜索过程中访问某个顶点后,需要递归地访问此顶点的所有未访问过的相邻顶点。 (1)递归实现 (2)也可以用非递归实现,借助于栈的数据结构 其中visited代表着每个节点是否被访问,一般定义成全局的数组。也有将visited定义为局部的数组,作为函数参数引用传递的。 2、BF 阅读全文
摘要:
struct和class如果按照在C的时代,还是有很大差别的。 c中struct的定义如下: struct 结构名 { 成员表 }; 因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程中,struct不能包含任何函数,如下所示: struct A { int length; 阅读全文
摘要:
连通图的一棵生成树是包含图的所有顶点的连通无环子图。 加权连通图的一棵最小生成树是图的一棵权重最小的生成树,其中,树的权重定义为所有边的权重总和。 最小生成树问题就是求一个给定的加权连通图的最小生成树问题。 最小生成树的算法主要有prim算法和kruskal算法,这篇主要讲解和实现后者。 krusk 阅读全文
摘要:
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该帐户的邮箱地址。 现在,我们想合并这些帐户。如果两个帐户都有一些共同的邮件地址,则两个帐户必定属于同一个人。请注意 阅读全文
摘要:
概念 无向图的割:有无向图G=(V,E)G=(V,E),设CC为图GG中一些弧的集合,若从GG中删去CC中的所有弧能使图GG不是连通图,称CC图GG的一个割。 S−T割:使得顶点SS与顶点TT不再连通的割,称为S−T割 S−T最小割:包含的弧的权和最小的S−T割,称为S−T最小割。 全局最小割:包含 阅读全文
摘要:
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 示例 1: 示例 2: 说明: 被除数和除数均为 32 位有符号整数。 除数不为 0。 假设我们的环境只能存储 3 阅读全文
摘要:
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。 示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 阅读全文