LC吐血整理之Graph篇

所有题解方法请移步 github-Leecode_summary

133. 克隆图

DFS&BFS 有整理过对象赋值、深拷贝、浅拷贝的关系,所以理解题目之后还是不难的,跟着原Graph遍历一遍并存储即可,注意两个Graph不能出现直接赋值的情况。(看完题解DFS,写的很不错~

399.除法求值

构建图+DFS

310.最小高度树

写在前面:我是用bfs获取每个顶点作为根节点时树的深度去做的,在运行55/66个案例时提示超时,好不容易能写出程序,一写就超时,我太难了...,看完题解,嗯?拓扑排序,好像之前写207题遇到过,根本没想到这些套路
类似题型:课程表I
     课程表II

拓扑排序
  拓扑排序算是有向无环图 (directed acyclic graph, DAG) 的一种遍历方法,满足一定的条件:图中任意一对顶点<u, v>∈E(G),则u在遍历结果中必须出现在v之前,拓扑排序结果可能不唯一。
  拓扑排序可以用于检测图中是否有环。
  举例来说:如果将一系列需要完成的任务构成一个有向图,运用拓扑排序能得到满足条件的任务执行顺序。
通用代码
几点概念:
  顶点的度(degree): 图中和该顶点相关联的边数,在有向图中通常分为入度和出度。
  入度(in-degree):图中指向该顶点的边数
  出度(out-degree):图中从该顶点出发的边数

一个简单的DAG

# 伪代码
def topological_sort():
    built the graphdict and indegree[]
    取得所有indegree = 0 的结点加入队列
    遍历队列中所有indegree = 0 结点的graphdict ,将其 indegree-1
        if 满足 indegree == 0:添加到遍历队列中
    直到队列为空

149. 直线上最多的点数

最开始我是用斜率相等做的,但很多情况都没有考虑:
① 重复点的处理
② 如果直接算斜率相等,float类型因为不精确所以报错(正好之前python取整中有提到decimal,可以考虑一下这个)
③ 怎么唯一表示斜率呢??题解告诉我了...化简dy/dx
今日份的Tips: 求两个数的最大公约数

def gcd(a,b):
    if b!=0:
        return gcd(b,a%b)
    else:
        return a
a = a//gcd(a,b)
b = b//gcd(a,b)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 所有题解方法请移步 github-Leecode_summary 200. 岛屿数量 三个字:不会做,没有什么好的...
    amilyxy阅读 481评论 0 0
  • Graph的题: 值得思考的点和概念:树、有向图、无向图、相连性、有圈无圈树是各节点之间只有一条路可走的无圈无向图...
    __小赤佬__阅读 611评论 0 0
  • 导语: 如果你已经加入了iOS攻城狮队伍,那么我们由衷地祝贺您正式成为一名终身学习的程序猿;有人觉得这句话...
    超人猿阅读 2,332评论 3 19
  • A application [ˌæplɪ'keɪʃ(ə)n]应用程式 应用、应用程序application fra...
    朱晓晓的技术博客阅读 1,018评论 0 2
  • Graph 的例子包括 City Map Power Distribution Network Water Dis...
    Super_Alan阅读 722评论 0 1