自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录 第三十二天 45.跳跃游戏 II||122.买卖股票的最佳时机 II55. 跳跃游戏

你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。你的目标是使用最少的跳跃次数到达数组的最后一个位置。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。说明: 假设你总是可以到达数组的最后一个位置。

2023-06-24 20:30:00 1093

原创 代码随想录 第二十八天 78.子集||90.子集II

示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。说明:解集不能包含重复的子集。

2023-06-20 20:19:13 1156

原创 代码随想录 第二十四天 17.电话号码的字母组合||216.组合总和III

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

2023-06-17 11:26:14 1441

原创 代码随想录 第二十三天 回溯算法 (77.组合问题)

回溯算法都可以抽象为一个树形结构(n叉树)如图所示:for 横向循环纵向递归,回溯算法实质是穷举,其算法的时间复杂度并不高,若想优化代码,可以科学的裁剪。

2023-06-16 11:18:26 1221

原创 代码随想录 第二十二天 108.将有序数组转换为二叉搜索树||538.把二叉搜索树转换为累加树||

如果该节点的值小于区间下限,说明该节点左孩子的值小于区间下限,右孩子的值不一定,所以把右孩子继续递归判断,同理,如果该节点的值小于区间下限,说明该节点右孩子的值大于区间上限,左孩子的值不一定,所以把左孩子继续递归判断。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。左右子树也必须是二叉搜索树。

2023-06-15 16:56:00 1215

原创 代码随想录 第二十二天 701.二叉搜索树中的插入操作||450.删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。最关键的一点是,当目标节点左右孩子都不为空的时候,将该节点的左孩子放到该节点的最右侧孩子的左孩子的位置上。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。

2023-06-14 18:10:00 1204

原创 代码随想录 530.二叉搜索树的最小绝对差||501.二叉搜索树中的众数||235. 二叉树的最近公共祖先

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。给定 BST [1,null,2,2],

2023-06-13 17:09:08 1249

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

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。给定二叉搜索树(BST)的根节点和一个值。你需要在BST中找到节点值等于给定值的节点。返回以该节点为根的子树。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。给定一个不含重复元素的整数数组。通过给定的数组构建最大二叉树,并且输出这个树的根节点。给定一个二叉树,判断其是否是一个有效的二叉搜索树。

2023-06-12 20:42:44 1327

原创 代码随想录 第十六天 404.左叶子之和||257. 二叉树的所有路径

首先,学会叶子的定义,叶子不能看孩子,只能看父系节点,当父节点的左子树和右子树都为空是时,这个父节点就可以认为是叶子节点。这个题目牵扯到了回溯算法,即每次遍历到叶子节点之后,都要返回根节点,重新开辟一条路径,达到叶子节点,所以用栈来储存元素。一开始,我把左叶子误认为是左孩子,结果程序写出来发现不对。给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。计算给定二叉树的所有左叶子之和。

2023-06-09 20:25:44 1913

原创 代码随想录 第十五天 二叉树的深度

给定一个二叉树,找出其最大(小)深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大(小)深度 3(2)

2023-06-08 15:16:09 1522

原创 代码随想录 第十六天 二叉树操作(反转,对称)

给定一个二叉树,检查它是否是镜像对称的。相关代码思想注释都在上面。

2023-06-07 20:45:00 1433

原创 代码随想录 第十五天 遍历二叉树(非递归)

第二个好理解,当左边树节点和右边树节点都为空时,既可以截断输出。参考代码随想录的代码,我的代码如下。(3)确定函数成员变量与输出变量。首先,要理解递归函数的方法。今天着实忙,一共学习2小时。144.二叉树的中序遍历。145.二叉树的后序遍历。94.二叉树的中序遍历。

2023-06-06 21:07:32 1568

原创 代码随想录 第十一天 ||20.有效的括号||150.逆波兰表达式||1047.删除字符串中所有的相邻重复项

输入: ["10", "6", "9", "3", "+", "-11", " * ", "/", " * ", "17", "+", "5", "+"]给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )。

2023-06-03 22:29:36 1829

原创 代码随想录第十天 栈与队列

(2)栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。(1)栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。从下图中可以看出,栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。队列中先进先出的数据结构,同样不允许有遍历行为,不提供迭代器,所以,栈是先进后出,队列是先进先出。

2023-06-02 14:40:35 1937

原创 代码随想录 第八天 反转字符串||反转字符串II||反转字符串里面的单词||左旋字符串||替换空格

比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。请实现一个函数,把字符串 s 中的每个空格替换成"%20"。输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]

2023-05-31 20:47:14 1984 1

原创 代码随想录第五天 第454题.四数相加II||383. 赎金信||

第454题.四数相加II给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1。输出:2输出:2。

2023-05-30 20:54:40 1962 1

原创 代码随想录 第二天 242.有效的字母异位词 349.两个数组的交集 202.快乐数 1.两数之和

对于字符串而言,数组是最容易想到的简单哈希表,那对于字母而言,在计算机内,和它唯一一一对应的,便是ASCII码,可以计算出s内的字母对应的ASCII码和a字母对应的ASCII码之差,然后相加,然后再逐个减掉t内的字母与a之间的ASCII码之间的差值之和,如果结果出现0,则说明是异味词,反之,则说明某个字符串有多余的字母。这个题目的关键点在于,无限循环,这个如何找到,如果,在求它每个位置上的数字的平方和得时候,如果在这之前就得到了相同的和,且不等于1,则代表不是快乐数了,返回false,反之,返回true.

2023-05-29 17:15:13 2218 1

原创 代码随想录第四天 142.环形链表II面试题|| 02.07. 链表相交||19.删除链表的倒数第N个节点

为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。快指针走过的长度为x+y+n*(z+y)题意: 给定一个链表,返回链表开始入环的第一个节点。(2)慢指针在环内经过n圈与快指针相遇,(其实无论转多少圈,和(1)效果是一样的)即从两个值指针分别从相遇点走,和从出发点走,重新的交汇点就是环的入口点。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。(1)首先慢指针在环内的第一圈和快指针相遇。

2023-05-27 21:38:17 2404 1

原创 代码随想录 第三天||203.移除链表元素

【代码】代码随想录 第三天||203.移除链表元素。

2023-05-26 19:44:24 2528 1

原创 代码随想录 第二天||977.有序数组的平方

示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]两个指针,i,j分别位于数组的第一个元素和最后一个元素,固定j,控制i<j,当num[j]>num[i]时候,比较num[j]与num【i~j-1】的元素,如果找到一个元素num[t],t。【i,j-1】,num[t]>num[j]大的时候,new[k-1]=num[t].,。还不如全部平方,然后统一排序呢。

2023-05-26 11:54:20 69 1

原创 代码随想录 第二天 209.长度最小的子数组||59.螺旋矩阵

这个就是滑动窗口的精髓了,不过在处理数组问题时,尤其是使用C++,一定要注意数组边界,因为C++的数组索引从0开始,数组最后一个元素索引为num.size()-1.如果不存在符合条件的子数组,返回 0。输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。所以,滑动窗口的思路就像一条毛毛虫,当i=0,i和j之间的元素之和大于s时,i向前走,j固定。定义定义两个指针(i,j),j向前走,当i和j之间的元素之和大于s时,这个时候,

2023-05-25 20:53:04 2453 1

原创 代码随想录第一天||二分法||移除元素

定义一个快指针和一个慢指针,快指针向前寻找元素值,慢指针紧跟其后储存新的数组元素值,当快指针寻找到目标元素时,慢指针暂停,快指针将下一个元素赋给慢指针,从而删除目标元素值,注意:数组和链表还不一样,数组元素值是连续寻址的,删除的实质是通过覆盖实现,链表是通过重新建立指针,回收旧址实现的。在左闭右开区间内,left=right是无意义的,所以要写“left<right”,另外,right代表的左边界是虚的,没有元素,所以在缩进边界时,牵扯到right,就不用middle-1了,左边界不用动。

2023-05-24 16:03:11 2701

空空如也

空空如也

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

TA关注的人

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