- 博客(57)
- 收藏
- 关注
原创 代码随想录算法训练营一刷总结
但是,经过60天的训练,(天天被吊打的过程中)理解了一个道理,无论遇到什么问题,不要老想着一次给出最完美的答案,先给一个很蠢的,很垃圾的甚至是错误的答案并承认这种方法的落后,再慢慢学习、慢慢修改,慢慢优化,最终这会给你下次遇到其他问题提供经验。并且功夫不负有心人,在刷题期间,成功转专业上岸,在港大和港科技的笔面中表现突出,尤其是港大面试中给到的算法题,因为刷过类似的题,一眼就能看出转化问题后应用哈希表解决,8人群面脱颖而出也顺利拿到了offer。训练营的60天,跨越春节和两次面试,让我受益匪浅。
2024-03-14 16:20:15
376
原创 代码随想录算法训练营第五十八天丨739. 每日温度、496. 下一个更大元素 I
还是好理解的,第二题一开始题意没搞明白,没注意到nums1是nums2的子集,绕了好大圈子。不得不说,python的defaultdict还是好用,可以大幅度简化代码...
2024-03-12 14:36:16
216
原创 代码随想录算法训练营第五十五天丨583. 两个字符串的删除操作、72. 编辑距离
继昨天,理解了“删除”的含义了。其实和可以从后向前思考,要得到dp[i][j],dp[i-1] dp[j - 1] 都要做些什么。
2024-03-09 12:02:14
245
原创 代码随想录算法训练营第五十三天丨1143.最长公共子序列、1035. 不相交的线、53. 最大子数组和
今天的题其实挺难的,春节期间被折磨了两天。但是一旦不是一刷,就变简单了好多,可见刷题重要性。
2024-03-07 10:30:38
238
原创 代码随想录算法训练营第五十一天丨309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费
想要设计完备事件组来表示状态还真不容易。
2024-03-05 13:01:16
173
原创 代码随想录算法训练营第四十八天丨121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
感觉第一题是中等第二题是简单...第一题动规解法难以理解的点会在dp[i][1]的更新与dp[i - 1][0]无关,因为全程只能买一次股票,第i天持有说明第i-1天及以前不可能有未持有股票的收益。第二题就好理解多了,可以买多次,以前也能有收益。
2024-03-02 08:30:01
163
原创 代码随想录算法训练营第四十七天丨198. 打家劫舍、 213. 打家劫舍 II、337. 打家劫舍 III
自己写能AC,都能get到要点~~~精简的代码还是得看题解。
2024-03-01 11:09:33
292
原创 代码随想录算法训练营第四十六天丨139. 单词拆分、多重背包
dp[0]必须是True,后续要用到与运算,起始点必须是True外循环必须是检查每个位置,因为后续有和自己的与运算,一定要在每个点检查所有可能性。感觉参透了这两种背包!!!这题都AC了!!!啊哈哈哈哈!!!
2024-02-29 08:54:01
254
原创 代码随想录算法训练营第四十五天丨卡码网:57. 爬楼梯、322. 零钱兑换、279. 完全平方数
简单简单简单!!如果每遇到一道题都可以告诉我用什么算法解决那就好了!!!
2024-02-28 17:18:01
166
原创 代码随想录算法训练营第四十四天丨完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ
主要纠结的点在第三题,总觉得总和为j - nums[i]有dp[j - nums[i]]种排列方法,加入nums[i]方法数取决于把nums[i]插在什么位置,这样想其实有点跟动态规划的思想背道而驰了。动态规划并不考虑这个问题,只关心达到总和j的排列数量,并且外循环的过程中已经隐式的包含了这个问题,对于任何一个num,考虑外面的大循环,如果每次都加在末尾,其实已经加在所有可能的位置了。
2024-02-27 22:58:18
232
原创 代码随想录算法训练营第三十八天丨动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
一刷动态规划,加油。通过解决斐波那契数、爬楼梯和最小花费爬楼梯三个经典问题,加深对DP的理解。学习包括状态定义、转移方程的确定、初始化及计算顺序,实践了空间复杂度优化。这些简单题练习加强了将理论应用于实际问题解决的能力,体现动态规划在解决具有重叠子问题和最优子结构问题中的有效性。
2024-02-21 14:06:51
427
原创 代码随想录算法训练营第三十七天丨738. 单调递增的数字、968. 监控二叉树
其实感觉贪心算法算是比较特殊的优化问题,通过利用问题的性质(例如有序、单调等)进行贪心选择,一次选择之后只剩下一个子问题,也就不需要动态规划去找之前所有的子问题的解了。有时候需要两次贪心,就要把一个复杂的问题分成多个优化问题,再对每一个问题进行贪心选择。一刷感觉本章还算比较容易理解吧。
2024-02-20 14:59:37
327
原创 代码随想录算法训练营第三十六天丨435. 无重叠区间、763. 划分字母区间、56. 合并区间
跟昨天的第三题很像,按照右边界排序,记录当前非重叠区间的右边界用于检测下个区间起点,由于区间按照右边界有序,非重叠区域右界必定是判断过的最小值;遍历剩下的interval,如果遇到不相交的,把当前的左右边界作为结果记录;仔细研究了一下,还是没能正确理解排序的作用,其实左边界已经有序了,左边界直接加入结果,如果有重叠直接更新右边界就可以了。改成左边界直接AC了,并没有能想明白。如果对右边界排序,则需要从后向前遍历,因为右边界有序,从后遍历右边界一定是更大的。,说明当前片段结束,记录当前片段的长度,并将。
2024-02-19 15:11:14
369
原创 代码随想录算法训练营第三十四天丨860.柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
全AC了,但第二三题跟题解比起来都在运行速度上有所欠缺,思路仍然不是十分清晰,看到题解会有豁然开朗的感觉。
2024-02-17 16:58:30
282
原创 代码随想录算法训练营第三十三天丨1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
两次贪心:先按绝对值排序,第一次从大到小反转绝对值大的负值。如果数组都非负了k还有剩余,一直反转绝对值最小的值直到k为0。
2024-02-16 14:08:38
283
原创 代码随想录算法训练营第三十二天丨122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II
你是一个超人并且理解你一定能用某种方法落到终点,初始你落到了起点,落下前你也观测到了从起点最远可到的位置(farthest=nums[0]),你从起始点开始起跳,起跳后跳跃次数加一,但你并没有落地,而是记录了下一个必须落地的位置(end = farthest)并且在空中不断审视之后的情况,你不断记录区间内(end及之前)可以跳到更远的距离farthest,当你在到达end必须下落时拿定了主意,落到可以到farthest的位置再次起跳(因为你是超人,不需要记录具体位置就可以精准落到产生farthest的地方)
2024-02-15 13:03:03
1746
原创 代码随想录算法训练营第三十一天丨455. 分发饼干、376. 摆动序列、53. 最大子数组和
题已经刷过了,今天通过理解问题的最优子结构性质以及尝试通过动态规划和贪心写法来学习两者的不同之处,加深了理解。今天另外又学了个词叫无后效性,之后遇到继续学。
2024-02-14 12:36:07
712
原创 算法导论记录丨16.1 活动选择、877. 石子游戏
问题的分解:石子游戏可以被分解成一系列更小的子问题,每个子问题都涉及到从一系列石子堆中选择石子的决策。对于任何一对给定的起始和结束点i和j,问题变成了在这个子序列中选择石子以最大化当前玩家相对于对手的分数差。子问题的最优解:每个子问题的最优解是指在给定的子序列中,玩家可以获得的最大分数差。这个最优解依赖于玩家在子序列的两端选择石子的决策。
2024-02-12 11:57:04
804
原创 算法导论记录丨[重看] 最大子数组、1143. 最长公共子序列/15.4 最长公共子序列
继续卷!!!!!!想了好久想通了了昨天的最大子数组问题。
2024-02-11 12:47:39
350
原创 算法导论记录丨15.1钢条切割、LCR 126. 斐波那契数/习题15.1-5、53. 最大子数组和
具体来说,动态规划算法会计算出对于每个长度i(1
2024-02-10 11:06:20
414
原创 代码随想录算法训练营第三十天丨332. 重新安排行程、51. N 皇后、37. 解数独
回溯算法本质上是一种通过递归来实现深度优先搜索(DFS)的算法。它试图在每一步做出选择,然后继续向前探索,如果发现当前选择并不是一个正确的解或者是一个最优解,它会撤销这个选择(也就是所谓的“回溯”),然后尝试其他的选项。
2024-02-08 13:06:52
226
原创 代码随想录算法训练营第二十九天丨491. 非递减子序列、46. 全排列、47. 全排列 II
之前学到的方法今天又全部用上了,全排列使用used数组且可以同时进行去重。
2024-02-07 09:42:46
188
原创 代码随想录算法训练营第二十三天丨669. 修剪二叉搜索树、 108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树
669. 修剪二叉搜索树递归:总算自己能想明白了!递归终止:遇到空节点停止。递归过程:如果一个节点小于low了,说明左子树也都小于low,那就return右子树。反之,大于high说明右子树都大于high,return左子树。如果在范围内,则左边连接递归修剪完的左子树,右边连接递归修剪完的右子树。class Solution: def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optio
2024-02-01 14:46:01
223
1
原创 代码随想录算法训练营第二十二天丨235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点
总能在叶子节点找到插入位置。
2024-01-31 09:51:14
117
原创 代码随想录算法训练营第二十一天丨530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先
第一题第二题自己能写出来了。第三题,这咋能想到这么写!!!
2024-01-30 18:59:36
186
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人