自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录|动态规划

2. 递推公式:因为这道题的重量和价值都是相同的,所以公式为dp[j] = max(dp[j], dp[j - stone[i] ]+ stone[i])2. 递推公式:dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])因为这道题的重量和价值都是相同的,所以公式为dp[j] = max(dp[j], dp[j - nums[i] ]+ nums[i])所以 dp[i][j] = dp[i-1][j] + dp[i][j-1]

2023-10-27 10:31:29 27 1

原创 代码随想录|贪心|

两层循环,外层放胃口,里层放饼干,这是因为每次循环胃口,我们都可以用当前的饼干判断一下是否可以满足当前的胃口,如果满足,饼干就可以index--,换成下一个饼干。在这种首情况下,我们算为两个摆动,为了更好的写出代码逻辑,我们可以在1-2前面增加一个元素,比如1-1-2,在这种情况下,就符合prediff=0,curdiff>0。3. 重叠的情况:否则,更新气球i的右边界,与气球i-1的右边界进行比较,为了取得相邻两个气球的右边界的最小值,如此为了判断i+1气球是否也可以被一起射中。

2023-09-19 10:48:59 94

原创 代码随想录|回溯|leetcode131,93,78,90,491,46,47,51,37

这题是排列问题,与组合问题关键的不同是允许例如[1,2,3],[3,2,1]这样的结果存在,所以我们不需要startindex来控制循环必须是否从元素的下一个开始,而是直接从i=0开始遍历就可以。还有一点需要注意的是,结果集中不允许有重复的元素出现,例如[1,1,2],所以我们需要利用一个used数组来标记每个元素的使用情况,当遍历完一个元素时,对应的used数组应该标记为1,然后下一层遍历我们就如果当前的元素被使用过,我们就直接跳过continue,遇到没有被标记的元素我们再加入到path里。

2023-09-17 10:28:47 30 1

原创 代码随想录|回溯|leetcode216,17,39,40

如果k和path的长度已经相等,说明我们已经找到符合要求的一个list,并且如果这个list的sum等于我们的n也就是targetsum,那我们就可以把这个加入到result里面。单层搜索逻辑:因为限制【1,9】所以for只能固定搜索1-9,处理过程就是选取一个i加入到path里,然后计算sum,递归下面就要有回溯的过程,和递归的逻辑是对应的。这也就是为什么candidates数组需要提前排序好,为了相邻的元素进行去重操作。同一树枝上的相同的两个元素可以选取,但是同一树层上的两个元素不可以重复选取。

2023-09-16 09:50:57 29 1

原创 代码随想录|回溯|理论基础+leetcode77

而不能直接写成path,因为在回溯算法中,需要修改。中的所有列表也都是空的,这不是你想要的。中的所有列表实际上都会引用相同的。最终,当回溯结束时,(而不是它的复制品),那么。

2023-09-15 12:07:07 37

原创 代码随想录|二叉树|leetcode669,108, 538

那么你可以确定该节点及其所有左子节点都在范围之外。因此,有效的树只可能在右侧。于是,你递归地调用函数修剪右子节点。,那么这个节点和它所有的右子节点都超出了范围。有效的树只可能在左侧。因此,你递归地调用函数修剪左子节点。为 null,则返回 null。这是递归方法的基础情况。(即先遍历右子树,再处理当前节点,最后遍历左子树)最后,返回修剪后的 root 节点。接住符合条件的左孩子和右孩子。

2023-09-14 20:14:30 24 1

原创 代码随想录|二叉树|leetcode235,701,450

这种情况下,我们需要找到一个替代的节点来替换当前要删除的节点。替代的节点可以是左子树的最大值节点或右子树的最小值节点。因此,它遍历右子树直到找到最左侧的节点(即最小值),然后将要删除节点的左子树连接到这个最小值节点的左子树上。节点的左子节点或右子节点,以指向新插入的节点(如果有的话)。,这意味着要删除的节点在左子树中,因此递归调用。,这意味着要删除的节点在右子树中,因此递归调用。的左子树中,因此我们将递归在左子树中查找。的右子树中,因此我们将递归在右子树中查找。的值赋给它,并返回这个新创建的节点。

2023-09-13 17:47:08 19

原创 代码随想录|栈和队列|leetcode20,1047,150

有效的括号思路: 初始化栈:提前过滤:遍历字符串中的每一个字符:最后的判断:删除字符串中的所有相邻重复项思路: 初始化:遍历字符串中的每个字符:构建结果字符串:逆波兰表达式求值 思路: 初始化堆栈: 使用 作为堆栈。这是一个双端队列,但在此处只使用其作为一个堆栈,也就是后进先出 (LIFO) 的数据结构。处理每个标记: 遍历 中的每个标记。对于每个标记,执行以下操作:返回结果: 处理完所有标记后,堆栈中的最后一个数字即为计算的结果。弹出并返回该数字。

2023-09-12 21:26:08 21

原创 代码随想录|队列和栈|leetcode232,225

【代码】代码随想录|队列和栈|leetcode232,225。

2023-09-12 20:16:44 20

原创 代码随想录|二叉树|leetcode530,501,236

分别在当前节点的左右子树中,因此当前节点就是它们的最低公共祖先,返回。或者是否是我们要找的其中一个节点。如果是,则返回当前节点。接下来,我们递归地在左子树和右子树中寻找。都不在当前节点的子树中,因此返回。:这个条件判断当前节点是否是。

2023-09-12 14:34:25 26

原创 代码随想录|字符串|leetcode 334,541,115 剑指offer05,58-II

反转字符串思路: 定义双指针:反转字符:循环直至指针相遇: 思路: 将字符串转为字符数组: 使用 将字符串转换为字符数组,方便后续的操作。分段处理:字符反转:返回结果: 使用 将字符数组转换回字符串,并作为结果返回。替换空格 思路: 检查字符串是否为空: 如果输入的字符串为空或长度为0,则直接返回输入的字符串。初始化 StringBuilder: 使用来计算新字符串中需要增加的空间。遍历原字符串: 对输入的字符串进行遍历,每当找到一个空格时,在中追加两个空格。这是因为

2023-09-11 20:18:48 28

原创 代码随想录|哈希|leetcode454,383,15,18

在哈希表中的频率(因为我们希望找到 a+b+c+d = 0 的组合,所以 a+b = -c-d)。该数组的大小是固定的,为26,对应26个小写字母。且为正数时,直接返回结果,因为后续的数字都会更大,不可能存在合适的四元组;:排序数组可以简化问题,因为当数组是排序的,我们可以简单地移动指针来增加或减少三个数字的和。,则将这四个数字加入结果中,并且移动指针到下一个不重复的位置。,因为一个较长的字符串不可能由一个较短的字符串构成。)的组合,我们计算它们的和,并使用。,它表示满足条件的元素组合的数量。

2023-09-11 15:39:14 21

原创 代码随想录|二叉树|leetcode654,617,700,98

用于存储上一个遍历到的节点。在中序遍历过程中,上一个节点的值应该小于当前节点的值,否则不满足BST的条件。: 这里定义了一个全局变量。

2023-09-11 11:00:01 21

原创 代码随想录|哈希|leetcode242,349,202,1

如果是,说明我们找到了两个数字的和为目标值,然后保存这两个数字的索引并退出循环。首先进行基本的空值和长度为0的检查。如果其中一个数组为空或长度为0,则直接返回一个空数组。的最后一位,以便在下一次迭代中处理下一个数字。数组中的每个位置的值就表示了该位置对应的字符在。:如果没有找到,我们将当前数字及其索引放入哈希表。循环来处理数字的每一位。这实现了累加每一位的平方的功能。数组中的位置增加1。数组中的位置减少1。:我们计算这一位的平方,然后加到。,这确保我们处理完数字的每一位。中的每一个元素,如果它在。

2023-09-10 22:15:25 28 1

原创 代码随想录|链表|leetcode24,19,面试题0207,142

两两交换链表中的节点 创建一个虚拟头节点:初始化指针:交换操作:返回结果: 删除链表的倒数第N个节点思路:关键是找到待删除元素的前一个元素创建一个虚拟头节点:初始化双指针:同时移动两个指针:删除节点:返回结果:面试题 02.07. 链表相交 思路: 计算两个链表的长度:找到长链表的起始点:寻找交点:此方法利用了“对齐”技巧。当两个链表的长度不同,且有交点时,那么较长链表的前几个节点不可能是交点。所以,可以安全地跳过它们,从而使两个链表长度相同。这种方法的优势在于只需要遍历两次链

2023-09-10 20:09:09 20 1

原创 代码随想录|链表|leetcode203,707,206

deleteAtIndex(int index) 如果是头部节点,head = head.next, 否则pred.next = pred.next.next。:定义链表的节点,每个节点包含一个整数值和一个指向下一个节点的指针。因为包含一个虚部节点,所以i <= index。这样,新的节点就被成功插入到了链表中。:在链表的开始位置插入一个新的节点。:在链表的末尾位置插入一个新的节点。:存储链表中元素的个数。,并将其值设置为给定的。

2023-09-10 16:37:56 17 1

原创 代码随想录|数组|leetcode977,209,59

这个方法的主要思想是由于输入数组是有序的,所以数组的两端可能包含最大的平方值。因此,从两端开始,选择最大的平方值并将其放入结果数组的相应位置。:最多循环 n/2 次,例如当 n=4 时,只需循环 2 次;当 n=5 时,需要循环 2 次,但中心点的数字需要额外填充。(代表没有找到符合条件的子数组),则返回 0,否则返回。在每次的循环中:注意左闭右开区间。为 0(代表窗口左边界)。(用于存放最小长度值),

2023-09-10 15:23:06 21 1

原创 代码随想录|数组|leetcode704,27

1. 定义两个指针,快指针寻找符合要求的数组元素,慢指针更新新数组下标的位置。是否小于数组的第一个元素或者大于最后一个元素。3. 使用一个 for 循环,其中的快指针。5.3 如果两者相等,则找到了目标,返回。如果循环结束后还没有找到目标,返回。应该在数组的左半部分,因此更新。应该在数组的右半部分,因此更新。,则跳过这个元素,并继续下一个循环。的元素的数量,即新的数组长度。,分别指向数组的起始和末尾。遍历到数组的最后一个元素。3.1 在每次循环中,检查。的值就是数组中不等于。1. 检查数组是否为。

2023-09-10 14:22:48 30 1

空空如也

空空如也

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

TA关注的人

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