高频算法
汇总经典的算法编程题
专注于计算机视觉的AndyJiang
这个作者很懒,什么都没留下…
展开
-
栈之消除连续k个重复的字符
给定一个字符串s和k,删除s中连续重复的k个字符,直到不能删除为止。示例:input: “aaadbbcccbbdd”, K=3dbbbbdddbddoutput: dbdddef remove_k(s, k): stack = [] n = len(s) i = 0 while i < n: temp = stack[-k+1:] t = list(set(temp)) if len(stack) >= k-1 and len(t) == 1原创 2020-09-13 10:22:50 · 626 阅读 · 0 评论 -
BFS之网格中的最短路径
LeetCode 1293. 网格中的最短路径给你一个 m * n 的网格,其中每个单元格不是 0(空)就是 1(障碍物)。每一步,您都可以在空白单元格中上、下、左、右移动。如果您 最多 可以消除 k 个障碍物,请找出从左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路径,并返回通过该路径所需的步数。如果找不到这样的路径,则返回 -1。示例 1:输入: grid = [[0,0,0], [1,1,0], [0,0,0], [0,1,1], [0,0,0]], k = 1输原创 2020-09-11 11:20:56 · 2270 阅读 · 0 评论 -
DFS之最大人工岛
Leetcode 827. 最大人工岛在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地。进行填海之后,地图上最大的岛屿面积是多少?(上、下、左、右四个方向相连的 1 可形成岛屿)示例 1:输入: [[1, 0], [0, 1]]输出: 3解释: 将一格0变成1,最终连通两个小岛得到面积为 3 的岛屿。示例 2:输入: [[1, 1], [1, 0]]输出: 4解释: 将一格0变成1,岛屿的面积扩大为 4。示例 3:输入: [[1, 1], [原创 2020-09-11 10:43:46 · 222 阅读 · 0 评论 -
数学动态规划之整数拆分
LeetCode 343. 整数拆分给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。数学法:尽可能多的拆成3如果能整除3:乘积为3^(n//3)如果除3的余数为1:拆成(n//3-1)个3和两个2,因为13 < 22如果除3的余数为2原创 2020-09-10 16:30:07 · 492 阅读 · 0 评论 -
区间DP之合并石头的最低成本
LeetCode 1000. 合并石头的最低成本有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的总数。找出把所有石头合并成一堆的最低成本。如果不可能,返回 -1 。示例 1:输入:stones = [3,2,4,1], K = 2输出:20解释:从 [3, 2, 4, 1] 开始。合并 [3, 2],成本为 5,剩下 [5, 4, 1]。合并 [4, 1],成本为 5,剩下 [5原创 2020-09-10 15:30:20 · 283 阅读 · 0 评论 -
BFS之公交路线
leetcode 815. 公交路线我们有一系列公交路线。每一条路线 routes[i] 上都有一辆公交车在上面循环行驶。例如,有一条路线 routes[0] = [1, 5, 7],表示第一辆 (下标为0) 公交车会一直按照 1->5->7->1->5->7->1->… 的车站路线行驶。假设我们从 S 车站开始(初始时不在公交车上),要去往 T 站。 期间仅可乘坐公交车,求出最少乘坐的公交车数量。返回 -1 表示不可能到达终点车站。示例:输入:route原创 2020-08-25 11:01:23 · 252 阅读 · 1 评论 -
DFS之被围绕的区域
leetcode 130. 被围绕的区域给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会原创 2020-08-25 09:58:50 · 152 阅读 · 0 评论 -
动态规划之括号匹配(二)包含多种括号
题目描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。如:[]是匹配的([])[]是匹配的((]是不匹配的([)]是不匹配的动态规划思路状态定义:使用二维dp,dp[i][j]表示从s[i]到s[j]的最少添加括号个数初始化:单独一个字符时,dp[i][j]=1,因为一个字符必定需要添加一个括号,其他值先赋值为0状态转移方程:循环遍历区间长度(区间长度m从1到n),每次考虑[i,j]内的区间(i从0开始,j=i+m)原创 2020-08-24 14:24:44 · 1440 阅读 · 2 评论 -
字符串之字符串相乘
leetcode 43. 字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。原创 2020-08-20 17:25:15 · 2600 阅读 · 0 评论 -
哈希表之物品的完美对数
有n个物品,每个有k个属性,ai,ja_{i,j}ai,j表示第iii件物品的第jjj个属性,两个物品被称为完美配对需要满足两个物品的任意一个属性之和相等,即ai,j+ak,j=ai,0+ak,0a_{i,j}+a_{k,j}=a_{i,0}+a_{k,0}ai,j+ak,j=ai,0+ak,0然后求完美配对的个数输入描述第一行n k表示物品数和属性数接下来n行每行k个数表示第i个物品的k个属性输出一个数字表示完美配对数输入5 32 11 2119 10 120 11 16原创 2020-08-18 17:06:14 · 914 阅读 · 0 评论 -
排列组合之冲突的邻居
一个监狱有n个房子,每个房子的人可以选择一个1~m的数,如果相邻房子的人选择的数字是一样的,就会发生冲突,问发生冲突的可能性有多少种。输入,m n分别表示可选数字的范围和房间的数目。输出冲突的种类,并对100003取模输入2 3输出6对于样例输入,发生冲突的情况有(1,1,1),(1,1,2),(1,2,2),(2,1,1),(2,2,1),(2,2,2)冲突的情况不好穷举,但是总的排列数目是可以求出的,为mnm^nmn,然后考虑不发生冲突的情况,第一个人有m个选择,第二个人只需要不和第一个原创 2020-08-18 16:46:39 · 142 阅读 · 0 评论 -
几何数学之曲线相交的面积
题目描述求函数 y2=2Axy^2=2Axy2=2Ax 和 y=Bx+Cy=Bx+Cy=Bx+C 两个曲线所围出的面积。如果没有所围面积,则输出0输入描述第一行一个数 nnn,表示测试用例的组数接下来 nnn 行,每行输入三个数,分别是 A B C每个用例输出一个数,表示面积,相对误差在10−410^{−4}10−4都算对输入11 1 -6输出31.2481110540先判断曲线是否存在交点,没有交点,输出0.第一个函数是yyy的二次函数,看起来不方便,把xxx和yyy交换,然后原创 2020-08-18 16:23:34 · 1315 阅读 · 0 评论 -
贪心算法之升级打怪
题目描述有一个人需要去打怪物,每打一个怪物需要耗费 xix_ixi 的血量,但是会获得 yiy_iyi 的金币,然后开局可以使用金币去购买血量,一个金币可以购买 qqq 点血量,用不完的血量所有怪物结束之后不会保留,每一个怪物都可以选择打或者不打,问最后结束时,可以获得最大的收益是多少。输入描述第一行输入 nnn qqq,分别表示总共有nnn个怪物,和一个金币可以购买qqq点血量接下来的 nnn 行,分别是xix_ixi yiy_iyi 分别是打一个怪物的消耗和金币收益输入3 21原创 2020-08-18 15:18:52 · 945 阅读 · 0 评论 -
并查集之朋友圈的个数
547. 朋友圈班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 1:输入:[[1,1,0], [1,1,0], [0,0,1]]输出:2 解释:已原创 2020-08-18 14:45:41 · 1063 阅读 · 0 评论 -
动态规划之最大平均值和的分组
leetcode 813. 最大平均值和的分组我们将给定的数组 A 分成 K 个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成。计算我们所能得到的最大分数是多少。注意我们必须使用 A 数组中的每一个数进行分组,并且分数不一定需要是整数。示例:输入: A = [9,1,2,3,9]K = 3输出: 20解释: A 的最优分组是[9], [1, 2, 3], [9]. 得到的分数是 9 + (1 + 2 + 3) / 3 + 9 = 20.我们也可以把 A 分成[9, 1],原创 2020-08-17 11:01:58 · 817 阅读 · 2 评论 -
二分图之人员分组
leetcode 886. 可能的二分法给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。当可以用这种方法将每个人分进两组时,返回 true;否则返回 false。示例 1:输入:N = 4, dislikes = [[1,2],[1,3],[2,4]]输出:true解释:group1 [1,4], g原创 2020-08-17 10:55:22 · 462 阅读 · 0 评论 -
贪心思想之用户分组
leetcode 1282. 用户分组有 n 位用户参加活动,他们的 ID 从 0 到 n - 1,每位用户都 恰好 属于某一用户组。给你一个长度为 n 的数组 groupSizes,其中包含每位用户所处的用户组的大小,请你返回用户分组情况(存在的用户组以及每个组中用户的 ID)。你可以任何顺序返回解决方案,ID 的顺序也不受限制。此外,题目给出的数据保证至少存在一种解决方案。示例 1:输入:groupSizes = [3,3,3,3,3,1,3]输出:[[5],[0,1,2],[3,4,6]]原创 2020-08-17 10:53:59 · 166 阅读 · 0 评论 -
数据结构设计之用栈实现队列/用队列实现栈
用栈实现队列使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。思路当s2为空时,可以把s1的所有元素取出再添加进s2,这时候s2中元素就是先进先出顺序了。注意栈的元素访问,只能是pop()或者-1例:原栈中元素为 1 2 3将其挨个弹出,放到第二个栈中,变为3 2 1然后1就是新的队列的第一个元素,就可以执行弹出pop操作class MyQueue原创 2020-08-17 09:37:18 · 428 阅读 · 2 评论 -
动态规划之最佳观光组合
LeetCode 1014. 最佳观光组合给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。示例:输入:[8,1,5,2,6]输出:11解释:i = 0, j = 2, A[i] + A[j] + i - j = 8 + 5 + 0 - 2 = 11思路:咋一看,很原创 2020-08-16 16:09:37 · 265 阅读 · 0 评论 -
BFS之单词接龙
leetcode 127. 单词接龙给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWord =原创 2020-08-15 21:15:06 · 138 阅读 · 0 评论 -
递归之有序链表转换二叉搜索树
leetcode 109. 有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5思路由于链表是有序的,所以原创 2020-08-15 16:54:21 · 143 阅读 · 0 评论 -
动态规划之机器人到达指定位置的方法数
机器人到达指定位置的方法数链接:https://www.nowcoder.com/questionTerminal/54679e44604f44d48d1bcadb1fe6eb61来源:牛客网假设有排成一行的N个位置,记为1~N,开始时机器人在M位置,机器人可以往左或者往右走,如果机器人在1位置,那么下一步机器人只能走到2位置,如果机器人在N位置,那么下一步机器人只能走到N-1位置。规定机器人只能走k步,最终能来到P位置的方法有多少种。由于方案数可能比较大,所以答案需要对1e9+7取模。输入描述:原创 2020-08-13 17:35:56 · 366 阅读 · 0 评论 -
数组之最佳配对
最佳配对给定两个长度为N的整型数组A和B。如果Ai==BjA_i==B_jAi==Bj则认为(i,j)为最佳配对。所有的最佳配对在满足以下条件的情况下组成最佳配对集合:A和B中的各个元素最多在集合中出现一次。例如,A =「5, 10, 11,12, 14」,B = 「8, 9 ,11, 11, 5」,配对集合为「(0,4),(2,2),(2,3)」,因为在集合A中索引2出现了两次,所以上面的配对集合不是最佳配对集合。你的任务是修改B中的一个元素,使得最佳配对集合的元素最多。并输出最佳配对集合的数量。原创 2020-08-13 15:33:41 · 502 阅读 · 0 评论 -
数组之公平划分
公平划分小爱和小溪有N个数字,他们两个想公平的分配这些数字。小爱拿的数字集合为I=「i1, i2, ik」,小溪获得剩下的J,J=「j1, j2, jn-k」。但是他们衡量分配公平与否的原则与众不同:在小爱拿到其中的K个数字的前提下,计算出他们分配偏差f(I)的最小值。输入描述输入第一行两个数字,分别表示总的数字量N和小爱拿的数字量K。第二行有N个数字,表示每个数字的值。输出描述输出一个数字,表示分配偏差f(I)的最小值。示例1输入4 13 3 3 1输出2本题可以直接暴力求解原创 2020-08-13 15:33:07 · 279 阅读 · 0 评论 -
字符串之字符串压缩
字符串压缩利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1:输入:"aabcccccaaa"输出:"a2b1c5a3"示例2:输入:"abbccd"输出:"abbccd"解释“abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。这个题可以直接按照题的意思去写,依次从前往后遍历,初始化字母次数为1,原创 2020-08-13 15:31:59 · 975 阅读 · 0 评论 -
数组翻转之煎饼排序
leetcode 969. 煎饼排序给定数组 A,我们可以对其进行煎饼翻转:我们选择一些正整数 k <= A.length,然后反转 A 的前 k 个元素的顺序。我们要执行零次或多次煎饼翻转(按顺序一次接一次地进行)以完成对数组 A 的排序。返回能使 A 排序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在 10 * A.length 范围内的有效答案都将被判断为正确。示例 1:输入:[3,2,4,1]输出:[4,2,4,3]解释:我们执行 4 次煎饼翻转,k 值分别为 4原创 2020-08-13 14:30:30 · 378 阅读 · 0 评论 -
数组之高效寻找重复和缺失的数字
leetcode 645. 错误的集合给一个长度为N的数组nums,其中本来装着[1…N]这N个元素,无序。但是现在出现了一些错误,nums中的一个元素出现了重复,也就同时导致了另一个元素的缺失。请你写一个算法,找到nums中的重复元素和缺失元素的值。示例 1:输入: nums = [1,2,2,4]输出: [2,3]方法一:hash先遍历一次数组,用一个hash表存储每个数字出现的次数,然后遍历一次[1,…N],看看哪个元素重复出现,哪个元素没有出现,就可以了.空间复杂度O(N)时间复杂原创 2020-08-12 16:33:28 · 668 阅读 · 0 评论 -
贪心思想之无重叠区间问题
本文参考以下链接,如有侵权,联系删除参考问题概述给你很多形如[start,end]的闭区间,请你设计一个算法,算出这些区间中最多有几个互不相交的区间。这个问题在生活中的应用广泛,比如你今天有好几个活动,每个活动都可以用区间[start,end]表示开始和结束的时间,请问你今天最多能参加几个活动呢?贪心解法可以分为以下三步:从区间集合 intvs 中选择一个区间 x,这个 x 是在当前所有区间中结束最早的(end 最小)。把所有与 x 区间相交的区间从区间集合 intvs 中删除。重复步骤原创 2020-08-12 14:06:58 · 309 阅读 · 0 评论 -
三角形思想之吃葡萄
本文参考以下链接,如有侵权,联系删除参考题目描述链接:https://www.nowcoder.com/questionTerminal/14c0359fb77a48319f0122ec175c9ada来源:牛客网有三种葡萄,每种分别有a,b,c颗。有三个人,第一个人只吃第1,2种葡萄,第二个人只吃第\2,3种葡萄,第三个人只吃第1,3种葡萄。适当安排三个人使得吃完所有的葡萄,并且三个人中吃的最多的那个人吃得尽量少。解析先不管每个人只能吃两种特定葡萄的约束,你怎么让「吃得最多的那个人吃得最少原创 2020-08-12 11:08:46 · 325 阅读 · 0 评论 -
合并区间和区间列表的交集
leetcode 986. 区间列表的交集给定两个由一些 闭区间 组成的列表,每个区间列表都是成对不相交的,并且已经排序。返回这两个区间列表的交集。(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)示例:输入:A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,1原创 2020-08-11 10:45:39 · 652 阅读 · 0 评论 -
堆之最大重叠子区间(会议室)
最大重叠子区间给出n个区间,找出重叠子区间的最大数量例:输入1 41 22 33 4输出2解释,最大重叠子区间出现在[1,2],重叠了2次,其他区间都重复了1次也可以将本题理解为需要的最少会议室数,区间代表会议的开始时间和结束时间.解法一思路:初始化一个数组times[],长度尽可能大,最好为最大的区间右端点遍历所有区间[start, end],令times[start] += 1, times[end] -=1,意义为,在start位置增加了一个区间,在end位置减少了一个原创 2020-08-11 10:44:34 · 1064 阅读 · 2 评论 -
回溯算法之复原IP地址
LeetCode 93. 复原IP地址给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。示例:输入: "25525511135"输出: ["255.255.11.135", "255.255.111.35"]典型回溯,看代码class Solution: def restoreIpAddresses(self, s: str) -> List[str]:原创 2020-08-11 10:43:48 · 163 阅读 · 0 评论 -
BFS之01 矩阵
leetcode 542. 01 矩阵给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000。给定矩阵中至少有一个元素是 0。矩阵中的元素只在四个方向上相邻: 上、下、左、右。BFSclass Sol原创 2020-08-11 10:43:23 · 174 阅读 · 0 评论 -
堆之数据流中的中位数
leetcode 295. 数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5a原创 2020-08-11 10:24:54 · 136 阅读 · 0 评论 -
数学之距离N最近的斐波那契数
给定一个N,找到距离它最近的斐波那契数def close_fib(n): fb0 = 0 fb1 = 1 while True: if n < fb1: left = n - fb0 right = fb1 - n if left < right: return fb0 else: return原创 2020-08-06 16:41:52 · 751 阅读 · 0 评论 -
链表之翻转从位置m到n的链表
leetcode 92. 反转链表 II反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL方案一:先找到要翻转的 a 和 b 点,注意保存 a 的前驱节点 prea 和 b 的后继节点 bnex ,然后翻转从 a 到 b 的部分,之后修改指针指向,让prea.n原创 2020-08-06 16:32:42 · 1371 阅读 · 0 评论 -
BST二叉搜索树的第k大节点
剑指 Offer 54. 二叉搜索树的第k大节点思路:中序遍历的逆过程,当遍历次数等于k,将当前节点的值保存下来,不包含递归栈的空间复杂度是O(1)# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:原创 2020-08-05 17:48:50 · 240 阅读 · 0 评论 -
BST二叉搜索树之增删查验
二叉树算法的设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架。98. 验证二叉搜索树# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isValidBST(self, roo原创 2020-08-05 16:27:45 · 279 阅读 · 1 评论 -
回溯算法之有效的数独
LeetCode 36. 有效的数独判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:[ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","原创 2020-08-04 16:18:56 · 162 阅读 · 0 评论 -
图论之课程表
LeetCode 207. 课程表你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],原创 2020-08-04 15:22:29 · 679 阅读 · 0 评论