![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
牛客刷题
追光者2020
没有实力的愤怒毫无意义。
展开
-
NC151 最大公约数(三种方式)
描述求出两个数的最大公约数,如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。示例1输入:3,6返回值:3示例2输入:8,12返回值:4详细链接class Solution {public: int gcd(int a, int b) { // write code here while(a!=b) {原创 2021-07-30 09:48:33 · 147 阅读 · 0 评论 -
NC143 矩阵乘法
描述给定两个nn的矩阵A和B,求AB。示例1输入:[[1,2],[3,2]],[[3,4],[2,1]]返回值:[[7,6],[13,14]]矩阵乘法,比如,矩阵A第一行要与矩阵B第一列对应元素相乘并相加,得到C[0][0],第二行元素与第一列元素相乘得到C[1][0]。因此需要有两重循环遍历行与列,然后需要一层循环遍历行与列中的每个元素。一共是三重循环。class Solution {public: vector<vector<int> > solve(vec原创 2021-07-29 11:12:18 · 192 阅读 · 0 评论 -
NC.10 大数乘法
描述以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。(字符串长度不大于10000,保证字符串仅由’0’~'9’这10种字符组成)示例1输入:“11”,“99”返回值:“1089”说明:11*99=1089需要注意的是按照正常计算的方式,计算顺序是从低位到高位,为了计算方便先将两个字符串转置,然后再计算。这里面一个技巧性的内容:计算 i+j 位的数字和是 s 的 i 位和 t的j 位的乘积与 t 的 i 位和 s的j 位的乘积之和。可以运用一个实际的算式验证一下。c原创 2021-07-28 19:05:01 · 352 阅读 · 0 评论 -
数组中的最长连续子序列
描述给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)示例1输入:[100,4,200,1,3,2]返回值:4示例2输入:[1,1,1]返回值:1本题目不要求位置连续,也就是不是连续子序列,简单的做法将数组排序且将数组中的重复元素去掉,特殊情况是如果排序以及去重后是有序数组,那么在循环中的else不会执行,因此需要在返回结果时比较一下len和res的长度大小。class Solution {public: int M原创 2021-07-28 17:30:17 · 540 阅读 · 0 评论 -
二叉树根节点到叶子节点的所有路径和
描述给定一个仅包含数字0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条路径,根节点到叶子节点的路径 1→2 用数字 12 代替,根节点到叶子节点的路径 1→3 用数字13 代替所以答案为+13=25 12+13=25示例1输入:{1,0}返回值:10示例2输入:{1,#,9}返回值:19在遍历的过程中计算根节点到叶节点的原创 2021-07-27 15:25:41 · 1293 阅读 · 0 评论 -
leetcode 72. 编辑距离(DP)+ 牛客 35 最小编辑代价
题目描述给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 = “inten原创 2021-07-26 16:26:00 · 306 阅读 · 0 评论 -
NC97 字符串出现次数的TopK问题(堆)
描述给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如"ah1x"小于"ahb",“231”<”32“字符仅包含数字和字母如果字符串数组长度为N,时间复杂度请达到O(NlogK)示例1输入:[“a”,“b”,“c”,“b”],2返回值:[[“b”,“2”],[“a”,“1”]]原创 2021-07-21 14:55:24 · 406 阅读 · 0 评论 -
LeetCode 14 最长公共前缀(招商银行提前批面试题)
题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。纵向比较法,将字符串按照纵列比较,如果一纵列字符均相等,那么该字符属于公共前缀的一部分,直到比较到不相等的字符为止或者其中一个字符串已经结束为止,就类似于短板效应。当然字典树也可以做,不过代原创 2021-05-27 09:42:23 · 112 阅读 · 0 评论 -
leetcode 329. 矩阵中的最长递增路径(记忆化搜索)
题目描述给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例 1:输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]输出:4解释:最长递增路径为 [1, 2, 6, 9]。示例 2:输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]输出:4解释:最长递增路径是 [3, 4, 5, 6]。注转载 2021-05-24 15:27:03 · 204 阅读 · 0 评论 -
leetcode 460. LFU 缓存
题目描述请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。实现 LFUCache 类:LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键存在于缓存中,则获取键的值,否则返回 -1。void put(int key, int value) - 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题中,当存在平局(即两个或更多个键原创 2021-05-23 20:50:24 · 115 阅读 · 0 评论 -
leetcode 92. 反转链表 II
题目描述给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]示例 2:输入:head = [5], left = 1, right = 1输出:[5]题解:该题目涵盖了链表翻转这一题目,翻转该区间就需要找到区间left前一个节点a(原创 2021-05-23 11:43:13 · 258 阅读 · 0 评论 -
leetcode 82. 删除排序链表中的重复元素 II
题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii本题目要求删除原创 2021-05-23 10:52:08 · 245 阅读 · 0 评论 -
LeetCode 328. 奇偶链表
题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6-&g原创 2021-05-23 10:12:30 · 94 阅读 · 0 评论 -
day40:67. 数字在排序数组中出现的次数(二分查找)
问题描述:统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。样例输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3输出:4使用二分搜索,只不过是经典案例的改编,经典案例是寻找一个数字,该数字并不是重复的,而本题目是寻找一个数字出现的次数,该数字会出现多次,折半查找的思路是:1)设置初始查找区间:low=0,high=n-12)测试查找区间是否存在,如果不存在,则查找失败,否原创 2020-07-05 17:30:37 · 1551 阅读 · 0 评论 -
leetcode 516. 最长回文子序列(区间DP问题)
题目描述给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:“bbbab”输出:4一个可能的最长回文子序列为 “bbbb”。示例 2:输入:“cbbd”输出:2一个可能的最长回文子序列为 “bb”。链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence区间DP问题基本模本如下:首先枚举区间长度,之后枚举区间的起始位置。框架如下其原创 2021-05-19 09:31:07 · 172 阅读 · 0 评论 -
汉诺塔问题(DP)
题目描述我们有从大到小放置的n个圆盘,开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把所有的圆盘都移到右边的柱子上,请实现一个函数打印最优移动轨迹。给定一个int n,表示有n个圆盘。请返回一个string数组,其中的元素依次为每次移动的描述。描述格式为: move from [left/mid/right] to [left/mid/right]。示例1输入 2返回值 [“move from left to mid”,“move from left to right”,“move原创 2021-05-18 21:05:35 · 591 阅读 · 0 评论 -
信封嵌套问题(DP)
题目描述给n个信封的长度和宽度。如果信封A的长和宽都小于信封B,那么信封A可以放到信封B里,请求出信封最多可以嵌套多少层。示例1输入 [[3,4],[2,3],[4,5],[1,3],[2,2],[3,6],[1,2],[3,2],[2,4]]返回值 4说明:从里到外分别是{1,2},{2,3},{3,4},{4,5}。示例2输入 [[1,4],[4,1]]返回值 1备注:时间复杂度O(nlog n),空间复杂度O(n)。题解对数组进行排序,排序的规则如下:如果长相等按照宽降序原创 2021-05-18 11:13:51 · 685 阅读 · 0 评论 -
数的划分(DP)
题目描述将整数n分成k份,且每份不能为空,任意两个方案不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5;1,5,1;5,1,1;问有多少种不同的分法。输入:n,k ( 6 < n ≤ 200,2 ≤ k ≤ 6 )输出:一个整数,即不同的分法。示例1输入 7,3返回值 4题解:参考链接class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可转载 2021-05-18 10:17:30 · 180 阅读 · 0 评论 -
找到搜索二叉树中两个错误的节点
题目描述一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请按升序输出这两个错误节点的值。(每个节点的值各不相同)示例1输入 {1,2,3}返回值 [1,2]思路:中序遍历二叉搜索树,遍历后正常的顺序应该是升序序列,但是由于两个节点交换了位置。因此两个节点所处的位置是不正确的,也就是相当于将数值大的节点与数值小的节点的位置相互交换,那么就会出现两次逆序的位置。此时,第一次逆序数值大的是错误节点,第二次逆序数值小的是错误的节点。/** * struct T原创 2021-05-17 20:49:06 · 485 阅读 · 0 评论 -
单调栈及其应用
题目描述给定一个可能含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小的位置。返回所有位置相应的信息。位置信息包括:两个数字 L 和 R,如果不存在,则值为 -1,下标从 0 开始。示例1输入 [3,4,1,5,6,2,7]返回值 [[-1,2],[0,2],[-1,-1],[2,5],[3,5],[2,-1],[5,-1]]单调栈的应用很局限,只有这种应用,要不是找左边离自己最近的最小的值,要不就是左边找离自己最大的值,右边亦然。为什么应用单调栈原创 2021-05-17 19:51:09 · 203 阅读 · 0 评论 -
字符串变形
题目描述对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如"Hello World"变形后就变成了"wORLD hELLO"。题解:首先翻转整个字符串,然后根据空格来划分字符串中的单词,记录单词的起始位置以及终止位置翻转,最后一个单词需要单独拎出来翻转。大小写转化相互转化可以使用普通的转化方式,也可以使用位运算符转化:c原创 2021-05-17 08:58:57 · 958 阅读 · 0 评论 -
不相邻最大子序列之和(打家劫舍)
题目描述给你一个n(1≤n≤105),和一个长度为n的数组,在不同时选位置相邻的两个数的基础上,求该序列的最大子序列和(挑选出的子序列可以为空)。示例1输入 3,[1,2,3]返回值 4说明有[],[1],[2],[3],[1,3] 4种选取方式其中[1,3]选取最优,答案为4该题目与打家劫舍性质类似。用dp[i] 来表示数组长度为i 时所构成的最大子序列和。dp[ i ] 由两部分组成,一部分是选择arr[i],那么意味着不能选取arr[i-1] ,只能选择dp[i-2],另一部分是不选择a原创 2021-05-14 10:03:54 · 294 阅读 · 0 评论 -
最大数
题目描述给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大,返回值需要是string类型 否则可能会溢出示例1输入 [30,1]返回值 “301”示例2输入 [0,0]输出 0一个二元运算符可以排序等价于该运算符是全序关系。是全序关系的话满足三个条件:完全性,反对称性,传递性。可以百度百科看一下。证明一下传递性:已知ab≥ba 和 bc≥cb 得出 ac≥bca* 10n + b ≥ b* 10m+a 化简得到 a (10n -1) ≥ b (1原创 2021-05-14 09:25:55 · 275 阅读 · 0 评论 -
换钱的最少货币数
题目描述给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。如果无解,请返回-1.【要求】:时间复杂度 O(n×aim),空间复杂度On。示例1输入 [5,2,3],20返回值 4题解:动态规划该题无法使用贪心,一开始想着排序,然后从最大的数开始分配,直到aim==0。但是有这样一种情况,[16,15,10,4] k=30 首先分配最大的那个16,aim=14,那么选择的原创 2021-05-13 19:42:05 · 206 阅读 · 0 评论 -
未排序数组中累加和为给定值的最长子数组系列问题(前缀和)
题目描述给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有子数组中累加和为k的最长子数组长度。示例1输入 [1,-2,1,1,1],0返回值 3题解:问题中给定的是子数组,可以想到使用前缀和,然后将前缀和以及下标存储到hash表中,如果前缀和恰好等于k,比较一下当前k的位置与此前记录的k的值的大小取最大值。如果是区间[ l,r ]和等于k,其长度等于s[r] - s[l-1] == k ,要想求解s[l-1] 是否在hash中存在,可以直接使用hash.find原创 2021-05-13 15:52:33 · 125 阅读 · 0 评论 -
leetcode37 解数独
题目描述编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。题解:回溯遍历顺序都是从空格开始依次向后遍历。两种回溯模板:一种是先将数独中的信息保存到三个bool数组中,一遍后续判断是否行列以及3*3宫格内是否出现过该数字,如果遍历到了某一行最后一列,那么就要返回到下一行执行,也原创 2021-05-13 10:56:48 · 110 阅读 · 1 评论 -
N皇后问题 and leetcode 51 N皇后
题目描述两种搜索方式:一种是按照行搜索,一种是按照单个位置选还是不选来搜索。const int N=10010;class Solution {public: /** * * @param n int整型 the n * @return int整型 */ int res=0; bool col[N],dig[N],udig[N];//列矩阵,对角矩阵,反对角矩阵 int Nqueen(int n) { // w原创 2021-05-12 17:27:12 · 167 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false对称的话,对于左右子树其左子树的左儿子和右子树的右儿子值相等右子树的左儿子和左子树的右儿子值相等如果节点值相等的话,就去看其儿子节点,如果不相等直接返回false。当然二者若都是空也返回true。class Solution原创 2021-05-10 21:21:44 · 60 阅读 · 0 评论 -
leetcode 33. 搜索旋转排序数组
题目描述整数数组 nums 按升序排列,数组中的值互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整原创 2021-05-10 20:42:06 · 69 阅读 · 0 评论 -
最小覆盖子串(滑动窗口)
题目描述给出两个字符串 SS 和 TT,要求在O(n)O(n)的时间复杂度内在 SS 中找出最短的包含 TT 中所有字符的子串。例如:S ="XDOYEZODEYXNZ"S=“XDOYEZODEYXNZ”T =“XYZ"T=“XYZ”找出的最短子串为"YXNZ”“YXNZ”.注意:如果 S 中没有包含 T 中所有字符的子串,返回空字符串 “”;满足条件的子串可能有很多,但是题目保证满足条件的最短的子串唯一。示例1输入 “XDOYEZODEYXNZ”,“XYZ”返回值 “YXNZ”题原创 2021-05-09 11:43:50 · 152 阅读 · 0 评论 -
几步可以从头跳到尾
题目描述给你一个长度为n的数组A。A[i]表示从i这个位置开始最多能往后跳多少格。求从1开始最少需要跳几次就能到达第n个格子。示例1输入 :2,[1,2]返回值 :1说明:从1号格子只需要跳跃一次就能到达2号格子示例2输入 :3,[2,3,1]返回值 :1说明:从1号格子只需要跳一次就能直接抵达3号格子题解:能否到达指定的格子意思是经过前面某一格子跳跃到该格子或者跳跃的距离大于该格子的距离。即记录最后一次跳跃的结束位置,如果上次跳跃的结束最大位置等于当前位置,但还没到达指定位置时,原创 2021-05-09 10:08:24 · 440 阅读 · 0 评论 -
通配符匹配
题目描述请实现支持’?‘and’*’.的通配符模式匹配‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任何字符序列(包括空序列)。返回两个字符串是否匹配函数声明为:bool isMatch(const char *s, const char *p)下面给出一些样例:isMatch(“aa”,“a”) → falseisMatch(“aa”,“aa”) → trueisMatch(“aaa”,“aa”) → falseisMatch(“aa”, “*”) → trueisMatch原创 2021-05-08 22:35:14 · 383 阅读 · 0 评论 -
leetcode 135 分发糖果
题目描述老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。链接:https://leetcode-cn.com/problems/candy两次遍历:从左向右遍历:左边原创 2021-05-08 20:54:23 · 107 阅读 · 0 评论 -
主持人调度(区间分组问题)
题目描述有n个活动即将举办,每个活动都有活动的开始时间与活动的结束时间,第i个活动的开始时间是start_i,第i个活动的结束时间是end_i,举办某个活动就需要为该活动准备一个活动主持人。一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,活动主持人参与了第i个活动,那么该主持人在start_i,end_i 这个时间段不能参与其他任何活动。求为了成功举办这n个活动,最少需要多少名主持人。示例1输入 2,[[1,2],[2,3]]返回值 1说明:只需要一个主持人原创 2021-05-08 20:18:03 · 1285 阅读 · 0 评论 -
LeetCode 108. 将有序数组转换为二叉搜索树
题目描述给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree看着这张图才想着取数组中的中间值,看牛客网的题目描述完全没思路。LeetCode上对于该题解有相应的证明,leetcode1382.本题目的大原创 2021-05-07 21:56:40 · 73 阅读 · 0 评论 -
day37:二叉搜索树与双向链表(递归) and leetcode 36 二叉搜索树与双向链表
问题描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。注意:需要返回双向链表最左侧的节点。例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。巧妙地利用二叉搜索树的特点,二叉搜索树是树的中序遍历,就在中序递归遍历的基础上改了一点点,用一个pre指针保存中序遍历的前一个结点。因为是中序遍历,遍历顺序就是双线链表的建立顺序;每一个结点访问时它的左子树肯定被访问过了,所以放心大胆的改它的left指针,不怕树断掉;同理,pr原创 2020-07-02 11:00:47 · 131 阅读 · 0 评论 -
完全二叉树结点总数/leetcode 222. 完全二叉树的节点个数(二分)
题目描述给定一棵完全二叉树的头节点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法。示例1输入 {1,2,3}返回值 3满二叉树节点的计算方法:如果一个二叉树的层数为K,且结点总数是(2^k) -1。如果左右子树层数相同,那么可以按照满二叉树公式计算节点;如果左右子树层数不同,那么需要一直向下遍历,该棵树的节点个数等于1+左子树节点数+右子树节点数。此时与普通二叉树的计算方式类似,只是如果是左右子树高度相等的话,那么可以直接计算,不需要递原创 2021-05-07 20:41:58 · 971 阅读 · 0 评论 -
单源点最短路(dijkstra)
题目描述在一个有向无环图中,已知每条边长,求出1到n的最短路径,返回1到n的最短路径值。如果1无法到n,输出-1示例1输入 5,5,[[1,2,2],[1,4,5],[2,3,3],[3,5,4],[4,5,5]]返回值 9备注:两个整数n和m,表示图的顶点数和边数。一个二维数组,一维3个数据,表示顶点到另外一个顶点的边长度是多少。每条边的长度范围[0,1000]。注意数据中可能有重边题解:自环在朴素版dijkstra算法中是没有任何影响的,所以自环的权值是多少都可以,只要不是负数就行。原创 2021-05-07 19:00:12 · 552 阅读 · 0 评论 -
二叉搜索树的第k小个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。示例1输入 {5,3,7,2,4,6,8},3返回值 {4}说明 按结点数值大小顺序第三小结点的值为4题目中并未给出 k 的取值范围,k 有可能比给定的二叉树节点要多,也有可能是0个。如果是0个的话,则返回nullptr,如果k比给定的二叉树节点要多的话,那么也返回nullptr。在dfs 这个函数中,k 使用的是引用,ans 保存的是 k ==0 时的节点,dfs 递归结束 k 有可能小于0,因此当 k <=原创 2021-05-07 16:31:21 · 185 阅读 · 0 评论 -
leetcode 617 合并二叉树
题目描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。链接:https://leetcode-cn.com/problems/merge-two-binary-trees三种情况:两个二叉树对应的节点均不为空,合并后的二叉树节点为二者之和。两个二叉树对应的节点有一个为空,那么合并后的二叉树的对应原创 2021-05-07 15:29:26 · 107 阅读 · 0 评论