自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第29天| 134. 加油站 , 135. 分发糖果 ,860.柠檬水找零 ,406.根据身高重建队列

给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。如果存在解,则 保证 它是 唯一 的。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目。

2024-08-19 21:13:08 313

原创 代码随想录算法训练营第28天| 122.买卖股票的最佳时机II ,55. 跳跃游戏, 45.跳跃游戏II ,1005.K次取反后最大化的数组和

你也可以先购买,然后在 同一天 出售。给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。选择某个下标 i 并将 nums[i] 替换为 -nums[i]。局部最优:收集每天的正利润,全局最优:求得最大利润。以这种方式修改数组后,返回数组 可能的最大和。

2024-08-19 15:44:46 835

原创 代码随想录算法训练营第27天| 455.分发饼干 ,376. 摆动序列,53. 最大子序和

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度。子数组是数组中的一个连续部分。

2024-08-13 22:51:52 350

原创 代码随想录算法训练营第24天| 93. 复原 IP 地址,78. 子集,90. 子集 II

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给你一个整数数组 nums ,数组中的元素 互不相同。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的。解集 不能 包含重复的子集。

2024-08-12 10:21:46 363

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

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。注意:解集不能包含重复的组合。

2024-07-25 20:01:36 290

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

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。你可以按 任何顺序 返回答案。哈希表、字符串、回溯。

2024-07-24 15:59:31 359

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

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。所以结果应当返回修剪好的二叉搜索树的新的根节点。并不是简单的不在范围就删除这个结点子树上的所有结点,这个子树上的其他元素也可能符合条件。

2024-07-23 10:46:05 277

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

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。利用回溯从底向上搜索,遇到一个节点的左子树里有p,右子树里有q,那么当前节点就是最近公共祖先。

2024-07-22 16:19:26 507

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

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。中序遍历下,输出的二叉搜索树节点的数值是有序序列。返回以该节点为根的子树。其实和遍历一个树逻辑是一样的,只不过传入两个树的节点,同时操作。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

2024-07-21 14:53:14 774

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

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。否则,返回 false。给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。利用深度优先搜索(DFS)的思想,通过递归遍历二叉树的每个节点,并在遍历过程中不断更新目标和。要找出树的最后一行的最左边的值。

2024-07-21 11:12:22 355

原创 代码随想录算法训练营第15天| 110.平衡二叉树 , 257. 二叉树的所有路径, 404.左叶子之和, 222.完全二叉树的节点个数

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。叶子节点 是指没有子节点的节点。

2024-07-20 20:23:20 234

原创 代码随想录算法训练营第14天| 226.翻转二叉树, 101. 对称二叉树, 104.二叉树的最大深度, 111.二叉树的最小深度

如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。根节点的高度,就是二叉树的最大深度,所以本题可以用前序遍历也可以用后序遍历。给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。给你一个二叉树的根节点 root , 检查它是否轴对称。先求高度,间接求最大深度,这里使用的是后序遍历。说明:叶子节点是指没有子节点的节点。

2024-07-17 16:45:17 327

原创 代码随想录算法训练营第13天|二叉树:理论基础、递归遍历、迭代遍历、层序遍历

int val;

2024-07-15 23:44:49 917

原创 代码随想录算法训练营第11天| 150. 逆波兰表达式求值, 239. 滑动窗口最大值, 347.前 K 个高频元素

递归的实现是栈:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。

2024-07-14 14:05:58 379

原创 代码随想录算法训练营第10天|232. 用栈实现队列,225. 用队列实现栈,20. 有效的括号,1047. 删除字符串中的所有相邻重复项

在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。用两个队列que1和que2实现队列的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

2024-07-14 12:52:42 1159

原创 代码随想录算法训练营第8天|151.翻转字符串里的单词 ,卡码网:55.右旋转字符串,28. 实现 strStr(),459.重复的子字符串

双指针法在数组,链表和字符串中很常用很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

2024-07-11 23:09:05 782

原创 代码随想录算法训练营第7天|344.反转字符串 ,541. 反转字符串II,卡码网:54.替换数字

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

2024-07-10 15:39:22 824

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

四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况。给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。注意:答案中不可以包含重复的三元组。

2024-07-09 23:14:59 976

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

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。将nums1 转化为哈希表的形式,用nums2 跟哈希表对比,如果nums2 中的元素在哈希表中出现过,就将这个元素放进result集合里,最后返回 result。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。哈希表、字符串、排序。

2024-07-08 12:48:42 772 1

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

什么使用用虚拟头结点,什么时候不用虚拟头结点?一般涉及到 增删改操作,用虚拟头结点都会方便很多, 如果只能查的话,用不用虚拟头结点都差不多。链表的种类主要为:单链表,双链表,循环链表链表的存储方式:链表的节点在内存中是分散存储的,通过指针连在一起链表是如何进行增删改查的。

2024-07-06 20:13:43 1175

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

改变链表的next指针的指向,将链表反转。然后开始反转操作,首先要把 cur->next 节点用temp指针保存一下,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。

2024-07-05 20:26:43 821

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

知识点:数组是存放在连续内存空间上的相同类型数据的集合数组下标都是从0开始的一维数组内存空间的地址是连续的那么二维数组在内存的空间地址是连续的么?Java的二维数组在内存中不是 3*4 的连续地址空间,而是四条连续的地址空间组成。

2024-07-04 15:31:09 1212

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

移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。暴力破解就是用后面的元素覆盖前面需要移除的元素;如果是双指针定义快慢指针,快指针指的是无论是否找到 val 都正常往后移动但是慢指针就不是这样了,遇到val 它就不更新了。两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。给你一个数组 nums 和一个值 val,你需要。

2024-07-03 23:05:27 379

空空如也

空空如也

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

TA关注的人

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