自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 代码随想录算法训练营第30天|32. 重新安排行程,51. N 皇后,37. 解数独

做这道题之前需要对图论有一定了解,那个链式建立的图表,一定要很清晰,然后这段代码中使用unordered_map<string, map<string, int>> 这种数据结构来代表图的这种链表还有防止闭环导致的无限循环,很巧妙。另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"] ,但是它字典排序更大更靠后。另外一点需要说明的是,在map里first是按字典顺序存储的,这个结合这段代码相信就可以很好理解本题了。如上图所示,4 皇后问题存在两个不同的解法。

2023-08-29 12:27:02 61

原创 代码随想录算法训练营第29天|491. 递增子序列

看上去这两段代码逻辑上一模一样,但是其实我们忘了一个点,就是path为空的时候我们没有做检查,是否在used里面。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。,找出并返回所有该数组中不同的递增子序列,递增子序列中。给定一个可包含重复数字的序列。给定一个不含重复数字的数组。返回所有不重复的全排列。下面给出一个错误代码。

2023-08-23 14:06:56 66

原创 代码随想录算法训练营第28天|93. 复原 IP 地址

2. 学习技术方面的:(计算机方面借鉴)学一门技术要考虑,用这个技术栈,你能做些什么,不能一股脑光学,只会浪费大量时间,而且我觉得学习效果不一定比实战派效率高(有待验证);不是自己要学习多少,而是尝试去明白学习这些东西是为了什么,用这些东西又可以做些什么。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。代码随想录上有用bool数组去重的,可以借鉴一下;,用以表示一个 IP 地址,返回所有可能的。返回的解集中,子集可以按。返回该数组所有可能的子集(幂集)。,这些地址可以通过在。

2023-08-23 00:14:41 59

原创 代码随想录算法训练营第28天|39. 组合总和,40. 组合总和 II,131. 分割回文串

2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。如果至少一个数字的被选数量不同,则两种组合是不同的。中的每个数字在每个组合中只能使用。7 也是一个候选, 7 = 7。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。给定一个候选人编号的集合。解集不能包含重复的组合。中所有可以使数字和为。

2023-08-20 20:13:11 52

原创 代码随想录算法训练营第24天|216. 组合总和 III,17. 电话号码的字母组合

在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。该列表不能包含相同的组合两次,组合可以以任何顺序返回。的字符串,返回所有它能表示的字母组合。所有可能的有效组合的列表。没有其他符合的组合了。没有其他符合的组合了。

2023-08-20 11:55:29 32

原创 代码随想录算法训练营第24天回溯|77. 组合

回溯算法都拥有一定的模版;

2023-08-20 11:19:43 20

原创 代码随想录算法训练营第23天|669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树,538. 把二叉搜索树转换为累加树

改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。通过修剪二叉搜索树,使得所有节点的值在。给你二叉搜索树的根节点。

2023-08-19 23:47:10 23

原创 代码随想录算法训练营第22天|235. 二叉搜索树的最近公共祖先,701. 二叉搜索树中的插入操作

中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]思路:从根节点开始搜索,if(r->val>p->val&&r->val>q->val)就往左滑,一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。,将值插入二叉搜索树。另一个正确答案是 [5,2,6,null,4,null,7]。

2023-08-19 20:34:28 87

原创 代码随想录算法训练营第21天|530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先

中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大((假设由递归产生的隐式调用栈的开销不被计算在内)(假设由递归产生的隐式调用栈的开销不被计算在内)给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。给你一个含重复值的二叉搜索树(BST)的根节点。给你一个含重复值的二叉搜索树(BST)的根节点。,找出并返回 BST 中的所有。给你一个二叉搜索树的根节点。(即,出现频率最高的元素)。(即,出现频率最高的元素)。

2023-08-19 13:42:03 24

原创 代码随想录算法训练营第二十天|654. 最大二叉树,617. 合并二叉树,700. 二叉搜索树中的搜索,98. 验证二叉搜索树

主要就是一层寻找最大值的逻辑,然后另一个就是构造二叉树的逻辑,一般都是,先构造根结点,然后递归构造左节点和右节点。- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。根节点的值是 5 ,但是右子节点的值是 4。

2023-08-16 16:40:14 26 1

原创 代码随想录算法训练营第十八天|513. 找树左下角的值,112. 路径总和,106. 从中序与后序遍历序列构造二叉树,105. 从前序与中序遍历序列构造二叉树

代返回值的递归:(这个要更难一些,因为我们必须要弄清所有的情况,来定对应返回值)由此我们也可以想到如果是记录最右边的,就把便利顺序换换就可以解决了。一直想左叶子递归,就会使得到达新的一层的时候,先访问最左边的;不存在 sum = 5 的根节点到叶子节点的路径。由于树是空的,所以不存在根节点到叶子节点的路径。的路径,这条路径上所有节点值相加等于目标和。等于目标和的根节点到叶节点路径如上图所示。路径总和等于给定目标和的路径。,请构造二叉树并返回其根节点。是指没有子节点的节点。是指没有子节点的节点。

2023-08-13 12:23:05 30 1

原创 代码随想录算法训练营第十七天|110. 平衡二叉树,257. 二叉树的所有路径,404. 左叶子之和

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。这个地方不是用to_string会有一个样例出现乱码不知道为什么;根据定义我们很容易就能想到这道题是跟高度相关的(采用后序遍历)给定一个二叉树,判断它是否是高度平衡的二叉树。的左右两个子树的高度差的绝对值不超过 1。高度就是叶子节点为1;深度就是根结点为1;,返回所有从根节点到叶子节点的路径。另外也需要知道什么叫平衡二叉树。给你一个二叉树的根节点。是指没有子节点的节点。,返回所有左叶子之和。

2023-08-11 20:15:16 33 1

原创 代码随想录算法训练营第16天|104. 二叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。注:这种带参数的递归不是很容易想,本题这种简单的就不过多解释了。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。是指从根节点到最远叶子节点的最长路径上的节点数。你可以设计一个更快的算法吗?可以仿照上一题写一个回溯,不难这里就不给出了。遍历树来统计节点是一种时间复杂度为。给定一个二叉树,找出其最小深度。叶子节点是指没有子节点的节点。,求出该树的节点个数。

2023-08-10 19:38:26 27 1

原创 代码随想录算法训练营第十五天| 二叉树的层序遍历(10),

给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。,其所有叶子节点都在同一层,每个父节点都有两个子节点。

2023-08-10 16:34:20 33 1

原创 代码随想录算法训练营第十四天|144. 二叉树的前序遍历,145. 二叉树的后序遍历,94. 二叉树的中序遍历

今天代码就一个词,专注,中序就一直往深处专,在调用递归站,后序一般都是两种想法,一种先存储到栈里再返回,另一种就是思考他的倒序存储方式;递归算法很简单,你可以通过迭代算法完成吗?递归算法很简单,你可以通过迭代算法完成吗?递归算法很简单,你可以通过迭代算法完成吗?给你一棵二叉树的根节点。给定一个二叉树的根节点。总之就是:用栈模拟递归。

2023-08-09 11:31:52 15 1

原创 代码随想录算法训练营第十三天|239. 滑动窗口最大值,347. 前 K 个高频元素

的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。优先队列的使用,主要是要学会如何定义一个优先队列,还有如何重写比较方法。滑动窗口的位置 最大值。滑动窗口每次只向右移动一位。,请你返回其中出现频率前。你所设计算法的时间复杂度。

2023-08-08 18:17:20 18 1

原创 代码随想录算法训练营第11天|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。用栈模拟一些过程,可以类比一下,一些生活场景。会选择两个相邻且相同的字母,并删除它们。给出由小写字母组成的字符串。,判断字符串是否有效。

2023-08-06 21:31:42 19

原创 代码随想录算法训练营第十天|232. 用栈实现队列,225. 用队列实现栈

通过这道题的练习我发现对队列函数还是较为模糊的,这道题就把front()和back()弄混了。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(这道题主要考查对栈和队列的理解和熟悉程度,题目并不难,这里就不给出解答了,请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(进阶版则需要添加指针了和换一种数据结构了,在用栈实现就比较困难了。你能否仅用一个队列来实现栈。

2023-08-04 15:59:41 20 1

原创 代码随想录算法训练营第九天|28. 找出字符串中第一个匹配项的下标,459. 重复的子字符串

所以它有的时候不回去的原因是最大相等前后缀长度没达到最大,如果达到最大我们会发现会回到,这也是kmp简化比较的一部分。使用kmp算法,实话实说第一遍刷代码随想录,这个算法并没有完全理解,理解了80%左右。"leeto" 没有在 "leetcode" 中出现,所以返回 -1。字符串的第一个匹配项的下标(下标从 0 开始)。第一个匹配项的下标是 0 ,所以返回 0。"sad" 在下标 0 和 6 处匹配。

2023-08-04 15:19:13 35 1

原创 代码随想绿算法训练营第八天|344. 反转字符串,541. 反转字符串 II,剑指 Offer 05. 替换空格,151. 反转字符串中的单词,剑指 Offer 58 - II. 左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。一本题为例,它本身是让我们练习字符串反转,如果我们直接调用reverse(),那么这道题则索然无味,但swap()交换就可以直接使用,因为我们的中的不是练习这道题。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。另一种解法先翻转前n个,再翻转后面的,最后全部一起在翻转一次,就得到了想要的。使用了翻转子串的方法,想起来挺自然的,但浪费了空间;

2023-08-03 14:57:05 21

原创 代码随想录算法训练营第七天|454. 四数相加 II,383. 赎金信,15. 三数之和,18. 四数之和

使用场景:当我们遇见大量数据需要处理时如果需要多个数据组合达到某个预期的结果时,我们可以现将其中的某些先组合在一起放到unordered_map中(底层是哈希表),然后再对其中的一些进行组合,使用unordered_map的find()来解决我们的问题。1.将数组排序,这样暴力解法的三个for循环中的i=0,j=i+1,k=j+1;本题采用了哈希查找的方法,将暴力算法的O(n4)降到O(n2),他的核心就是利用哈希查找的时间复杂度是O(n)。注意,输出的顺序和三元组的顺序并不重要。,请你计算有多少个元组。

2023-08-02 02:28:11 122

原创 代码随想录算法训练营第六天|242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

你能否调整你的解法来应对这种情况?你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。2.find()函数,没有找到时返回a.end(),找到时返回迭代器地址。但是会浪费大量空间,这道题还有一种做法,就是对字符串进行排序后,再比较。这里的数组本质上是哈希表的使用的第一种(用数组映射)记事本方法记录以前出现过的数据,方便给以后重复。中每个字符出现的次数都相同,则称。整数,并返回它们的数组下标。

2023-07-31 23:33:41 274 2

原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个结点,面试题 02.07. 链表相交,142. 环形链表 II

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。链表问题主要要学会使用虚拟头结点,就像图中的t,这样就可以避免把头结点,单独拿出来讨论。这种时间复杂度过高为O(n*m),但也能这道题可以考虑数据的特性,从有相同节点开始,从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。

2023-07-30 15:30:18 394 1

原创 代码随想录算法训练营第三天|203. 移除链表元素,707. 设计链表,206. 反转链表

这道题本身逻辑很简单,只是有一个易错点,就是头结点的next节点,也应该翻转,即头结点的next节点指向NULL;// 链表变为 1->2->3。// 现在,链表变为 1->3。1.删除的节点是头结点(保存当前指针,然后将头指针往后移,删除保存的指针)2.删除的节点不是头结点(这个我采用代码形式说明,不太会画图)另外就是还需要考虑指针为空的问题,避免访问,这里就不多说明了。你可以选择使用单链表或者双链表,设计并实现自己的链表。,请你反转链表,并返回反转后的链表。是指向下一个节点的指针/引用。

2023-07-29 00:58:04 569

原创 代码随想录算法训练营第二天|977.有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II

这个地方用j来当末尾指针,i当开始指针,前后指针一起工作感觉还是有点巧妙的;平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]1.暴力求解,时间复杂度O(n+nlogn)注:滑动窗口感觉不是很理解,在多做几道题;所有元素,且元素按顺时针顺序螺旋排列的。这道题我觉得无需多言,直接上代码;如果不存在符合条件的子数组,返回。2.双指针法,主要利用绝对值特性。是该条件下的长度最小的子数组。个正整数的数组和一个正整数。组成的新数组,要求也按。1.暴力算法,可惜超时了。

2023-07-27 22:30:41 584 1

原创 代码随想录算法训练营第一天|704.二分查找,27.移除元素

例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。这里i很明显是用来遍历数组,而j则是表示已经遍历过的数组不等于目标元素val的个数,也就是本题应该输出的int。左闭右开即while(i

2023-07-26 20:33:05 819

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除