leetcode
关关教你学编程
这个作者很懒,什么都没留下…
展开
-
系统设计的面试题和解答
1、设计 Pastebin.com (或者 Bit.ly) 2、 3、 4、 5、 6、 7、 8、原创 2020-02-14 14:14:35 · 580 阅读 · 0 评论 -
277. 搜寻名人
假设你是一个专业的狗仔,参加了一个n人派对,其中每个人被从0到n - 1标号。在这个派对人群当中可能存在一位“名人”。所谓 “名人” 的定义是:其他所有n - 1个人都认识他/她,而他/她并不认识其他任何人。现在你想要确认这个 “名人” 是谁,或者确定这里没有“名人”。而你唯一能做的就是问诸如 “A你好呀,请问你认不认识B呀?”的问题,以确定 A 是否认识 B。你需要...原创 2018-08-28 13:46:42 · 425 阅读 · 0 评论 -
面试题3、求二叉树每一层最右节点值
得到二叉树每一层最右边一个节点值,存到一个数组中得到结果,并给出测试样例、时间复杂度和空间复杂度。二叉树总节点数:m,层数:h思路1: 深搜,时间复杂度O(m),空间复杂度O(h).void dfs (TreeNode* root, int level, vector<int> &re){ if(!root) return; if(re....原创 2018-09-02 12:48:54 · 2705 阅读 · 0 评论 -
除留余数法实现哈希表,开vector法解决冲突
思路:除留余数法,f(key) = key mod p,p一般选取素数,减少发生冲突的次数,比如这里选19。对应的vector的f(key)位置上已经有pair对了,也就是发生冲突了,该如何处理?那就在这个位置上,额外再开一个vector,把这些pair对顺序存进去,相当于挂一串锁。实现了m.contain, m.erase,m[]操作。class HashTable{priva...原创 2017-12-14 22:20:40 · 1727 阅读 · 0 评论 -
一个优雅的三路快排
思路同75、颜色分类,将整个数组分为三段,小于aa,等于aa,大于aa,其中aa是在数组中随机取的一个数。1、设置两个指针,l记录第一个非小于aa的位置,l左边比aa小,r记录最后一个非大于aa的位置,r右边比aa大。然后使用i从头到尾扫一遍,nums[i]遇到比aa小的数就和nums[l]互换,遇到比aa大的数就和nums[r]互换,遇到aa就跳过,直到i>r停止(i要将nums[r]...原创 2017-12-14 10:15:38 · 822 阅读 · 0 评论 -
444. 序列重建
验证原始的序列org是否可以从序列集seqs中唯一地重建。序列org是 1 到 n 整数的排列,其中 1 ≤ n ≤ 104。重建是指在序列集seqs中构建最短的公共超序列。(即使得所有 seqs中的序列都是该最短序列的子序列)。确定是否只可以从seqs重建唯一的序列,且该序列就是org。示例 1:输入:org: [1,2,3], seqs: [[1,2],[...原创 2020-02-01 14:33:16 · 1302 阅读 · 0 评论 -
310. 最小高度树
对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。格式该图包含n个节点,标记为0到n - 1。给定数字n和一个无向边edges列表(每一个边都是一对标签)。你可以假设没有重复的边会出现在edges中。由于所有的边都是无...原创 2020-02-01 11:40:06 · 397 阅读 · 0 评论 -
图的题目归类总结
类别 题目 并查集 261, 323, 684 最短路径 743 最小生成树 1135 拓扑排序 207, 210, 802,310 关键路径法 图的知识点补...原创 2020-01-31 23:21:07 · 563 阅读 · 1 评论 -
332. 重新安排行程
给定一个机票的字符串二维数组[from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 出发。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前...原创 2020-01-31 22:44:48 · 356 阅读 · 0 评论 -
785. 判断二分图
给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边:graph[i]中不存...原创 2020-01-31 17:49:14 · 262 阅读 · 0 评论 -
261. 以图判树
给定从0到n-1标号的n个结点,和一个无向边列表(每条边以结点对来表示),请编写一个函数用来判断这些边是否能够形成一个合法有效的树结构。示例 1:输入: n = 5, 边列表 edges = [[0,1], [0,2], [0,3], [1,4]]输出: true示例 2:输入: n = 5, 边列表 edges = [[0,1], [1,2], [2,3], [...原创 2020-01-31 12:00:22 · 1945 阅读 · 0 评论 -
图的知识点补充(AOE网络的关键路径)
一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图。 AOE(Activity On Edge)网:顾名思义,用边表示活动的网,当然它也是DAG。与AOV不同,活动都表示在了边上,如下图所示: 如上所示,共有11项活动(11条边),9个事件(9个顶点)。整个工程只有一个...原创 2020-01-30 00:25:18 · 1159 阅读 · 0 评论 -
1135. 最低成本联通所有城市(最小生成树)
想象一下你是个城市基建规划者,地图上有N座城市,它们按以1到N的次序编号。给你一些可连接的选项conections,其中每个选项conections[i] = [city1, city2, cost]表示将城市city1和城市city2连接所要的成本。(连接是双向的,也就是说城市city1和城市city2相连也同样意味着城市city2和城市city1相...原创 2020-01-29 20:19:52 · 2415 阅读 · 0 评论 -
743. 网络延迟时间(最短路径)
有N个网络节点,标记为1到N。给定一个列表times,表示信号经过有向边的传递时间。times[i] = (u, v, w),其中u是源节点,v是目标节点,w是一个信号从源节点传递到目标节点的时间。现在,我们向当前的节点K发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回-1。Example 1:Input: ti...原创 2020-01-27 23:36:13 · 912 阅读 · 0 评论 -
802. 找到最终的安全状态(拓扑排序)
在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走。 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止。现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的。 更具体地说, 存在一个自然数K, 无论选择从哪里开始行走, 我们走了不到K步后必能停止在一个终点。哪些节点最终是安全的? 结果返回一个有序的数组。该有向图有N个节点,标签为0,...原创 2020-01-27 19:15:39 · 346 阅读 · 0 评论 -
210. 课程表 II(拓扑排序)
现在你总共有n门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例1:输入: 2, [[1,0]] ...原创 2020-01-27 14:52:36 · 269 阅读 · 0 评论 -
133. 克隆图
给你无向连通图中一个节点的引用,请你返回该图的深拷贝(克隆)。图中的每个节点都包含它的值val(int) 和其邻居的列表(list[Node])。class Node { public int val; public List<Node> neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 ...原创 2020-01-26 22:54:28 · 217 阅读 · 0 评论 -
207. 课程表(拓扑排序)
现在你总共有n门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能...原创 2020-01-26 18:17:02 · 398 阅读 · 0 评论 -
399. 除法求值
给出方程式A / B = k, 其中A和B均为代表字符串的变量,k是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回-1.0。示例 :给定a / b = 2.0, b / c = 3.0问题:a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ?返回[6.0, 0.5, -1.0, ...原创 2020-01-26 14:59:08 · 241 阅读 · 0 评论 -
323. 无向图中连通分量的数目(并查集)
给定编号从 0 到 n-1 的 n 个节点和一个无向边列表(每条边都是一对节点),请编写一个函数来计算无向图中连通分量的数目。示例 1:输入: n = 5 和 edges = [[0, 1], [1, 2], [3, 4]] 0 3 | | 1 --- 2 4输出: 2示例 2:输入: n = 5 和 e...原创 2020-01-26 10:06:30 · 755 阅读 · 0 评论 -
684. 冗余连接(并查集)
在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v],满足u < v,表示连接顶点u和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N...原创 2020-01-25 18:52:55 · 350 阅读 · 0 评论 -
1306. 跳跃游戏 III
这里有一个非负整数数组arr,你最开始位于该数组的起始下标start处。当你位于下标i处时,你可以跳到i + arr[i]或者i - arr[i]。请你判断自己是否能够跳到对应元素值为 0 的任意下标处。注意,不管是什么情况下,你都无法跳到数组之外。示例 1:输入:arr = [4,2,3,0,3,1,2], start = 5输出:true解释:...原创 2020-01-25 12:27:11 · 233 阅读 · 0 评论 -
1267. 统计参与通信的服务器
这里有一幅服务器分布图,服务器的位置标识在m * n的整数矩阵网格grid中,1 表示单元格上有服务器,0 表示没有。如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。请你统计并返回能够与至少一台其他服务器进行通信的服务器的数量。示例 1:输入:grid = [[1,0],[0,1]]输出:0解释:没有一台服务器能与其他服务器进行通信。...原创 2020-01-25 11:38:05 · 298 阅读 · 0 评论 -
841. 钥匙和房间
有N个房间,开始时你位于0号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间i都有一个钥匙列表rooms[i],每个钥匙rooms[i][j]由[0,1,...,N-1]中的一个整数表示,其中N = rooms.length。 钥匙rooms[i][j] = v可以打开编号为v的房间。...原创 2020-01-23 15:30:56 · 311 阅读 · 0 评论 -
1043. 分隔数组以得到最大和
给出整数数组A,将该数组分隔为长度最多为 K 的几个(连续)子数组。分隔完成后,每个子数组的中的值都会变为该子数组中的最大值。返回给定数组完成分隔后的最大和。示例:输入:A = [1,15,7,9,2,5,10], K = 3输出:84解释:A 变为 [15,15,15,9,10,10,10]提示:1 <= K <= A.length<=...原创 2020-01-22 11:48:40 · 393 阅读 · 1 评论 -
959. 由斜杠划分区域
在由 1 x 1 方格组成的 N x N 网格grid中,每个 1 x 1方块由/、\或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此\用"\\"表示。)。返回区域的数目。示例 1:输入:[ " /", "/ "]输出:2解释:2x2 网格如下:示例 2:输入:[ " /", " ...原创 2020-01-22 10:28:55 · 2757 阅读 · 0 评论 -
1161. 最大层内元素和
给你一个二叉树的根节点root。设根节点位于二叉树的第1层,而根节点的子节点位于第2层,依此类推。请你找出层内元素之和最大的那几层(可能只有一层)的层号,并返回其中最小的那个。示例:输入:[1,7,0,7,-8,null,null]输出:2解释:第 1 层各元素之和为 1,第 2 层各元素之和为 7 + 0 = 7,第 3 层各元素之和为 7 +...原创 2020-01-21 22:04:55 · 335 阅读 · 0 评论 -
1042. 不邻接植花
有N个花园,按从1到N标记。在每个花园中,你打算种下四种花之一。paths[i] = [x, y]描述了花园x到花园y的双向路径。另外,没有花园有 3 条以上的路径可以进入或者离开。你需要为每个花园选择一种花,使得通过路径相连的任何两个花园中的花的种类互不相同。以数组形式返回选择的方案作为答案answer,其中answer[i]为在第(i+1)个花园...原创 2020-01-21 18:09:38 · 288 阅读 · 0 评论 -
997. 找到小镇的法官
在一个小镇里,按从1到N标记了N个人。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。 每个人(除了小镇法官外)都信任小镇的法官。 只有一个人同时满足属性 1 和属性 2 。给定数组trust,该数组由信任对trust[i] = [a, b]组成,表示标记为a的人信任标记为b的人。如果小镇存在秘密法官并且可...原创 2020-01-21 16:48:35 · 475 阅读 · 0 评论 -
刷题过程中,那些总也记不住的语法
这篇文章中的内容,只是采用我比较熟悉的方式进行记录,内容零散,格式混乱,请多包涵。大致分了类:一、与vector相关的1、sort(不光用于vector)(1)Sort函数有三个参数:(第三个参数可不写)第一个是要排序的数组的起始地址。第二个是结束的地址(最后一位要排序的地址)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排...原创 2020-01-21 11:49:25 · 510 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3...原创 2019-10-30 16:32:01 · 233 阅读 · 0 评论 -
383. 赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)注意:你可以假设两个字符串均只含有小写字母。canConstruct("a", "...原创 2018-01-01 16:20:41 · 612 阅读 · 1 评论 -
202. 快乐数
编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。示例:思路:不开辟额外空间,设置快慢指针,快指针每次走两步,慢指针每次走一步:1、如果不是快乐的数,那么快慢指针早晚会在一个环内相遇;...原创 2018-01-01 13:16:18 · 192 阅读 · 0 评论 -
103. 二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]思路1:宽搜,和102. ...原创 2019-10-12 15:02:59 · 213 阅读 · 0 评论 -
1. 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路:用哈希表,key存数组元素,value存对应的下标值,遍历数组,当查找到target...原创 2017-12-28 19:24:54 · 477 阅读 · 0 评论 -
2. 两数相加
给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807其实就是大数相加问题...原创 2018-03-08 11:47:31 · 320 阅读 · 0 评论 -
7. 反转整数
给定一个 32 位有符号整数,将整数中的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231− 1]。根据这个假设,如果反转后的整数溢出,则返回 0。思路:如何反转整数很简...原创 2018-01-08 12:24:35 · 263 阅读 · 0 评论 -
请看这里!!!leetcode题目目录!!!
leetcode题目目录 面试题1 25人赛跑问题-得出前三名 面试题2 求二叉树每一层最右节点值 面试题3 除留余数法实现哈希表 面试题4 一个优雅的三路快排 面试题5 图的知识点补充(AOE网络的关键路径) 图 其他 刷题过程中,那些总也记不住的语法 语法 其他 图的题目归类...原创 2019-08-03 13:04:20 · 4346 阅读 · 0 评论 -
72. 编辑距离
给定两个单词word1和word2,计算出将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例1:输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rorse -> ros...原创 2018-05-20 16:56:51 · 470 阅读 · 0 评论 -
50. Pow(x, n)
实现pow(x,n),即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例2:输入: 2.10000, 3输出: 9.26100示例3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 <x< 10...原创 2018-05-02 11:03:28 · 250 阅读 · 2 评论