自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 20240821 代码随想录 | 图论

【代码】20240821 代码随想录 | 图论。

2024-08-22 18:10:24 118

原创 20240820 代码随想录 | 图论 岛屿

这里注意count不能当成bfs的参数传,因为这样的话只是局部改变bfs内的count,主函数中count不受影响。注意这里,我没有用visited标记遍历过的点,而是直接将遍历过的1变成0,以避免dfs中的递归进入死循环。

2024-08-21 15:00:55 293

原创 20240819 代码随想录 | 动态规划 子序列

给定字符串和,判断是否为的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?我的解法:动态规划:同最长公共子序列,最后判断最长公共子序列长度是否等于len(s)

2024-08-20 11:20:35 720

原创 2024.08.12 代码随想录 | 动态规划 子序列问题

给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列难点:状态转移方程位置i 的 最长升序子序列 等于 j。所以:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);如果nums[i] < 所有的 nums[j],那不是取 初始值1了吗?所以这里dp[i]表示的是考虑nums[:i]时,所选序列中。

2024-08-19 13:33:24 861

原创 2024.08.07 代码随想录 | 动态规划 背包问题

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,今晚能够偷窃到的最高金额。小偷又发现了一个新的可行窃的地区。

2024-08-12 16:08:46 912

原创 2024.08.06 代码随想录 | 动态规划 背包问题

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1 <= m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。

2024-08-06 15:33:26 431

原创 2024.08.05 代码随想录 | 动态规划 背包问题

这里的区别在于dp[0][j]表示不取任何物品时使得质量为j的取法,dp[i+1][j]表示从nums[0]到nums[1]任取时使得质量为j的取法。2. 完全背包问题可以交换两个for的顺序,01背包中二维dp数组的两个for遍历的先后循序也可以颠倒,但一维dp数组的两个for循环先后循序一定是先遍历物品,再遍历背包容量。1. 这里跟01背包的区别就是,遍历背包容量的时候不需要从大到小,之前需要从大到小是为了避免一个物品重复放入,完全背包可以重复放入,因此遍历背包容量的时候就要从小到大。

2024-08-06 14:29:24 450

原创 2024.08.02 代码随想录 | 动态规划 背包问题

有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。如果x == y,那么两块石头都会被完全粉碎;如果x!= y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回0。转化为背包问题:背包质量为sum(stones) // 2 向下取整,看最大可以放进多大质量的石头。

2024-08-05 10:29:56 869

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

机器人试图达到网格的右下角(在下图中标记为 “Finish”)。个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。F(n) = F(n - 1) + F(n - 2),其中 n > 1。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。开始,后面的每一项数字都是前面两项数字的和。你有多少种不同的方法可以爬到楼顶呢?我的解答:这一题跟上一题一样换了个说法。请你计算并返回达到楼梯顶部的最低花费。

2024-08-01 16:07:58 311

原创 2024.07.31 代码随想录 | 贪心算法

我的解法:先记录每个字母第一次出现和最后一次出现的下标位置[start,end], 将这样的区间组成my_list,再对my_list操作。按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。处射出一支箭,若有一个气球的直径的开始和结束坐标为。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。返回一个表示每个字符串片段的长度的列表。

2024-07-31 14:16:33 451

原创 2024.07.30 代码随想录 | 贪心算法

这个与跳跃游戏的区别在于,对每一个cover,我们在这个cover内每一个i里面寻找下一个最大的cover,直到最大的才更新。而跳跃游戏解法是,对每一个cover,我们遍历这个cover内的i同时更新cover,直到cover能覆盖整个nums。,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付。你从其中的一个加油站出发,开始时油箱为空。请你给每个孩子分发糖果,计算并返回需要准备的。顾客排队购买你的产品,(按账单。

2024-07-30 17:25:42 758

原创 2024.07.29 代码随想录 | 贪心算法

1. 下一个数比当前大, count 加一,i加一, 如果下一个数还是大于等于当前数, i加一, 直到下一个数小于当前。2. 下一个数比当前小, count加一,i加一, 如果下一个数还是小于等于当前数, i加一, 直到下一个数大于当前。3. 特殊例子:nums[0] == nums[1],要新增判断,否则i一直不变,死循环。此时,i加一, 如果下一个数还是等于当前数, i加一,直到下一个数不等于当前。其他解法:记录每天正收益。其他解法:对每一个数计算。我的想法:分三种情况,我的解法:记录正收益。

2024-07-29 13:29:33 162

原创 2024.07.24 代码随想录 | 回溯算法——排列问题 & 三道难题

给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以返回答案。注意:排列问题的话是要求树枝不重复,树层可以重复,因此选择用used数组来记录,当used[i]等于true的时候说明在该树枝中used[i]已经用过了。给定一个可包含重复数字的序列nums返回所有不重复的全排列。注意:这里要求不重复,那么树层也不能重复。

2024-07-26 14:19:10 423

原创 2024.07.23 代码随想录 | 回溯算法——分割&子集

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。注意:我认为这一题的难点在于搞清楚树状图,横向和纵向分别怎么迭代。,找出并返回所有该数组中不同的递增子序列,递增子序列中。注意:这一题和上一题思路一样,都是按要求分割字符串。,用以表示一个 IP 地址,返回所有可能的。返回该数组所有可能的子集(幂集)。返回的解集中,子集可以按。分割成一些子串,使每个子串都是。所有可能的分割方案。,这些地址可以通过在。

2024-07-23 15:32:45 282

原创 2024.07.22 代码随想录 | 回溯——组合

如果不使用count,也可以直接用sum(cur)来判断,但效果不如前面的。给出数字到字母的映射如下(与电话按键相同)。该列表不能包含相同的组合两次,组合可以以任何顺序返回。如果至少一个数字的被选数量不同,则两种组合是不同的。错误示范🙅:不是一个数字一定对应三个字母,7和9对应4个。的字符串,返回所有它能表示的字母组合。中的每个数字在每个组合中只能使用。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。解集不能包含重复的组合。所有可能的有效组合的列表。中所有可以使数字和为。

2024-07-22 16:17:36 317 1

原创 day 12 | 栈与队列 3.21 周四

python里面的list相当于栈pop()相当于出栈,append()相当于入栈。请你仅使用两个栈实现先入先出队列。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。,再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。在push数据的时候,只要数据放进输入栈就好,会选择两个相邻且相同的字母,并删除它们。,这里要注意输入栈和输出栈的关系。,判断字符串是否有效。

2024-03-21 22:43:40 426 1

原创 day 11 | 贪心算法

数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。在每一天,你可以决定是否购买和/或出售股票。向前跳转的最大长度。生成的测试用例可以到达。你也可以先购买,然后在。处,你可以跳转到任意。给你一个非负整数数组。

2024-03-20 22:33:17 336 1

原创 day 9 | 动态规划

网格的左上角 (起始点在下图中标记为 “Start” )。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。网格的左上角 (起始点在下图中标记为 “Start” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。所以递推公式:dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});如果定义dp[i - j] * dp[j] 也是默认将一个数强制拆成4份以及4份以上了。j * dp[i - j]是拆分成两个以及两个以上的个数相乘。

2024-03-19 22:54:42 421 1

原创 day 10 | 贪心算法 3.19 周二

很容易可以发现,对于我们当前考虑的这个数,要么是作为山峰(即 nums[i] > nums[i-1]),要么是作为山谷(即 nums[i] < nums[i - 1])。一定是取最大的,所以dp[i] = max(dp[i - 1] + nums[i], nums[i])不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

2024-03-19 22:53:52 667 1

原创 day 8 | KMP算法 + 动态规划 (补3.15)

还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。个台阶向上爬需要支付的费用。所以dp[i] = dp[i - 1] + dp[i - 2]。那么dp[i]就是 dp[i - 1]与dp[i - 2]之和!从dp[i]的定义可以看出,dp[i] 可以有两个方向推出来。dp[i]: 爬到第i层楼梯,有dp[i]种方法。

2024-03-16 18:15:46 1416 1

原创 day 7 | 字符串 (补3.14)

中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。判断字符串s是否由重复子串s'组成,只要两个s拼接在一起,里面还出现一个s的话,就说明是由重复子串组成。输入字符串以字符数组。当然,我们在判断 s + s 拼接的字符串里是否出现一个s的的时候,,这样避免在s+s中搜索出原来的s,我们要搜索的是中间拼接出来的s。,检查是否可以通过由它的一个子串重复多次构成。不要给另外的数组分配额外的空间,你必须。中使用至少一个空格将字符串中的。

2024-03-16 01:14:50 321 1

原创 day 6 | 继续哈希表

​​​​​​​。

2024-03-14 00:54:56 319 1

原创 day 5 | 哈希表

快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。不是,则返回 False。编写一个算法来判断一个数 n 是不是快乐数。中每个字符出现的次数都相同,则称。整数,并返回它们的数组下标。答案中不可以包含重复的三元组。你可以按任意顺序返回答案。,请你在该数组中找出。

2024-03-13 02:04:09 1782

原创 day4 | 链表

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。第一次相遇:假设快指针走了f,慢指针走了s,则f = 2s 且 f - s = nb,所以 f=2nb, s=nb。注意当输入为[7,7,7,7],7时,这个时候整个链表被删掉了,所以要保存头节点位置,否则不能返回正确结果。示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。,请你反转链表,并返回反转后的链表。

2024-03-11 23:22:19 1561

原创 day 3 | 滑动窗口

注意这里可以用[0] * 26是因为能保证两个字符串都是小写字母,如果既有大写又有小写,不可行。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)。如果不存在符合条件的子数组,返回。,请你找出其中不含有重复字符的。所有字符的子串,则返回空字符串。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。所有字符的最小子串。、长度最长的子数组的长度。

2024-03-10 17:21:42 337

原创 day 2 | 移除元素之双指针算法

的元素,并返回移除后数组的新长度。两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回。你不需要考虑数组中超出新长度后面的元素。区别在于找到需要的宝藏之后需要左右互换值,把不需要的宝藏往后挪。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。最终,合并后数组不应由函数返回,而是存储在数组。s 会变成 "c",但 t 仍然是 "b"。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。个元素表示应合并的元素,后。个结点,并且返回链表的头结点。

2024-03-10 00:04:32 771 1

原创 day 1 | 二分查找

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。

2024-03-07 00:52:52 403

空空如也

空空如也

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

TA关注的人

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