- 博客(23)
- 收藏
- 关注
原创 代码随想录算法训练营第二十七天 | 力扣 39. 组合总和 力扣 40.组合总和II 力扣 131.分割回文串
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。s.substr(startIndex, i)截取s的子串,从startIndex开始,长度为i。说明: 所有数字(包括目标数)都是正整数。解集不能包含重复的组合。candidates 中的每个数字在每个组合中只能使用一次。如果至少一个数字的被选数量不同,则两种组合是不同的。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。所有可能的分割方案。
2024-04-10 21:19:43
268
原创 代码随想录算法训练营第二十五天 | 力扣 216.组合总和III 力扣 17.电话号码的字母组合
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。该列表不能包含相同的组合两次,组合可以以任何顺序返回。的字符串,返回所有它能表示的字母组合。所有可能的有效组合的列表。
2024-04-10 17:49:03
317
原创 代码随想录算法训练营第二十三天 | 力扣 669. 修剪二叉搜索树 力扣 108.将有序数组转换为二叉搜索树 力扣 538.把二叉搜索树转换为累加树
深度优先中,前中后序遍历算法都很重要,各自有其适用的场合,前序适合从上往下遍历,在二叉搜索树中,使用中序遍历必定会得到有序数组,后序遍历适合从下往上遍历。在深度优先算法中,最重要的思想是递归思想,递归最重要的三步:确定返回值和参数、确定终止条件、确定一次递归所需的操作。在广度优先中,层序遍历是常用的方法,一般都考虑使用迭代算法,迭代算法时需要选用合适的容器来存储。
2024-04-09 18:33:59
419
原创 代码随想录算法训练营第二十二天 | 力扣 235 二叉搜索树的最近公共祖先 力扣 701.二叉搜索树中的插入操作 力扣 450.删除二叉搜索树中的节点
中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。返回插入后二叉搜索树的根节点。给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。,新值和原始二叉搜索树中的任意节点值都不同。给定二叉搜索树(BST)的根节点。给定一个二叉搜索树的根节点。
2024-04-09 16:43:55
169
原创 代码随想录算法训练营第二十一天 | 力扣 530.二叉搜索树的最小绝对差 力扣 501.二叉搜索树中的众数 力扣236.二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。给你一个含重复值的二叉搜索树(BST)的根节点。差值是一个正数,其数值等于两值之差的绝对值。,找出并返回 BST 中的所有。如果树中有不止一个众数,可以按。给你一个二叉搜索树的根节点。(即,出现频率最高的元素)。
2024-04-09 10:29:27
207
原创 代码随想录算法训练营第二十天 |力扣654 最大二叉树 力扣 617.合并二叉树 力扣700 二叉搜索树中的搜索 力扣98 验证二叉搜索树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;二叉搜索树:对于所有节点,都有:左子树上所有值都小于节点值,右子树上所有值都大于节点值。迭代法:中序遍历的有序性,将遍历点存入数组中,判断数组是否有序。返回以该节点为根的子树。给定一个二叉树,判断其是否是一个有效的二叉搜索树。null 的节点将直接作为新二叉树的节点。合并过程必须从两个树的根节点开始。给定二叉搜索树(BST)的根节点。
2024-04-08 16:34:24
344
原创 代码随想录算法训练营第十八天 |力扣513 找树左下角的值 力扣112 路径总和 力扣106 从中序与后序遍历序列构造二叉树
的路径,这条路径上所有节点值相加等于目标和。是同一棵树的后序遍历,请你构造并返回这颗。和一个表示目标和的整数。是指没有子节点的节点。是二叉树的中序遍历,
2024-03-29 16:52:31
321
1
原创 代码随想录算法训练营第十七天 |力扣110 平衡二叉树 力扣257.二叉树的所有路径 力扣404. 左叶子之和
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定一个二叉树,判断它是否是高度平衡的二叉树。,返回所有从根节点到叶子节点的路径。to_string()强制类型转换。给你一个二叉树的根节点。是指没有子节点的节点。
2024-03-28 16:44:05
545
原创 代码随想录算法训练营第十六天 | 599.N叉树的深度 111.二叉树的最小深度 222.完全二叉树的节点个数
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。给定一个二叉树,找出其最大深度。
2024-03-26 16:24:59
225
原创 代码随想录算法训练营第十五天 | 层序遍历 226.翻转二叉树 101.对称二叉树
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。,其所有叶子节点都在同一层,每个父节点都有两个子节点。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。,翻转这棵二叉树,并返回其根节点。叶子节点是指没有子节点的节点。
2024-03-26 11:06:32
674
原创 代码随想录算法训练营第十三天 | 239. 滑动窗口最大值 347.前 K 个高频元素
pop,即将窗口最左边的元素出列,出列方向是front(左边),每次pop时,需要传入x,因为不确定需要pop的元素是否还在队列里,有可能已经在之前push的操作中移除了,只需要判断一下x==que.front() ,是的话que.pop_front(),否则不需要操作。对于队列里的元素来说,我们看重的不是所有元素,而是只维护窗口里的最大值和可能成为最大值的元素,同时保证窗口里的元素数值是从大到小排列的,如此就能做到当需要求最大值时,从front里查找就可以了。这种维护元素单调递减的队列叫单调队列。
2024-03-20 15:43:56
1187
1
原创 代码随想录算法训练营第十一天 | 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值
使用栈来做,遍历一遍s,当遇到左括号时,在栈内压入对应的右括号,当遇到右括号时,如果栈顶是对应的右括号则出栈。直到遍历完整个s,中间如果出现右括号不对应,那么直接返回0,遍历结束以后栈不为空时也返回0。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。要注意的是,tokens里的元素为字符串形式,需要转化为数字格式。遍历一遍s,如果当前元素与栈顶元素相同,则出栈,不同则入栈。
2024-03-18 20:32:16
916
原创 代码随想录算法训练营第十天 | 232.用栈实现队列 225.用队列实现栈
队列:队列也是一种容器适配器,遵循先入先出的数据结构,队列一般提供四种操作,入列(push)、出列(pop)、查看第一个元素(front)、查看最后一个元素(back)栈:栈是一种先入后出的数据结构,是一种容器适配器,栈一般提供三种操作,压栈(push)、出栈(pop)、查看顶元素(top)。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(队列是先入先出的,可以使用两个栈来实现。
2024-03-18 15:45:34
552
原创 代码随想录算法训练营第九天 | 28. 找出字符串中第一个匹配项的下标(实现strStr()) 459.重复的子字符串
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
2024-03-17 17:18:56
395
1
原创 代码随想录算法训练营第八天 | 344. 反转字符串 541. 反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网 55.右旋字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]
2024-03-16 13:43:20
1179
1
原创 代码随想录算法训练营第七天 | 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
当nums[i] + nums[left] + nums[right] == 0 时,将此时的三个值存入result中,考虑到需要去重,判断一下left与其右边是否相等,相等则跳过,同样的,判断right与其左边是否相同,相等则跳过,然后left右移,right左移。示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。看起来是可以的,但是有个问题时题目中要求不能包含重复的三元组,即[-1,-1,2]只能用一次,但是在上面的构思中,去重是个十分棘手的操作。
2024-03-13 16:42:11
1067
原创 代码随想录算法训练营第六天 | 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
数据量小(1000以内)或者跨度小用数组,判断是否出现时数据量大用set,数据对集合用map,首先考虑用unordered ,重复记录用multi,有序不重复用 set/map。
2024-03-12 15:48:17
830
1
原创 小鱼刷力扣第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
链表是个很神奇的东西,依靠结构体,使用两部分,值和指针,完美的复现了数组的功能,在链表的相关题里,实现了增删改查功能,基于此之上还有交换节点等,另外使用了多次双指针,可见双指针在编程中的重要性。尤其是链表相交这题,完美的阐述了数学与程序的关系,不得不惊叹一句:很神奇!本文部分图文出自:代码随想录。
2024-03-10 11:47:34
1012
1
原创 代码随想录算法训练营第三天 | 203.移除链表元素 707.设计链表 206.反转链表
递归思想很重要,需要多多思考。递归的思想相当考验逻辑能力,递归和循环可以相互实现,使用递归可使代码更简洁,构造递归函数时,对应循环,需要首先考虑循环的初始值,对应递归函数的参数,然后需要考虑循环结束的条件,对应递归的返回值,然后就是一层循环结束以后,第二层循环各个量的关系,对应二次调用递归函数的参数。一定注意Index与cur的关系,Index是第几节点,cur是下标,在有虚拟头节点的时,cur==Index,在没有虚拟头节点时,cur ==Index-1,尤其是在添加节点时,十分容易弄错。
2024-03-08 22:07:35
2270
1
原创 代码随想录算法训练营第二天 | 977有序数组平方、209长度最小的子数组、59螺旋矩阵II
两天的刷题学习,学到的方法有二分法、双指针、滑动窗口和模拟过程深刻理解了代码的编写过程与功能实现的思考过程,总得来说收获颇丰,下图是代码随想录的数组部分总结图,贴过来记录一下hhh。ps:文章中有部分图文和理论来自代码随想录。
2024-03-07 17:23:01
2041
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人