自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2243:Knight Moves

你的一个朋友正在研究旅行骑士问题 (TKP),你要找到最短的骑士步数封闭之旅,该游轮在棋盘上只访问一次给定的 n 个方格的每个方格。他认为问题中最困难的部分是确定两个给定方格之间的最小骑士移动次数,一旦你完成了这个任务,找到巡回赛就很容易了。BFS算法又称广度搜索法,是从一个点一层一层向外扩散直至覆盖整个区域,需要用一个队列来暂存遍历的所有结点,方法和递归有所出入,细分应该算是迭代法。你的工作是编写一个程序,将两个方格 a 和 b 作为输入,然后确定从 a 到 b 的最短路线上的骑士移动次数。

2023-12-02 18:47:09 357

原创 Day52:84.柱状图中最大的矩形

截止到现在,打卡顺利完成,接下来就是二刷代码随想录,一切任重而道远!加油加油。(等待图论部分的更新ing)😎😎😎。

2023-11-30 14:24:48 69

原创 Day51:503.下一个更大元素II、42. 接雨水

而情况1表明找到了st.top()前比它大的元素位置,而st.top()后比他大的元素位置就是它在栈内位置的下方元素,那么这道题就迎刃而解了,困难题也没有那么“困难”。已经知道单调栈储存的元素是从栈头到栈底单调递增的元素。这道题直接变成困难题,愿意就是前面的题目都是找一边的最大值,而这道题是找两边的最大值。情况2和情况3和之前操作一样,先把元素放入栈内保存着,遍历寻找下一个比它大的元素。循环直接可以用查找两次来解决,所以题目步骤唯一不同的就是循环的终止位置。的不同之处在于这个查找是循环的。

2023-11-30 13:42:45 143

原创 Day50:739. 每日温度、496.下一个更大元素 I

打卡断了几天,今天开始写单调栈。单调栈顾名思义就是用一个栈保存元素,里面的元素大小是单调的,要么从小到大,要么从大到小。利用单调栈可以轻松找到一个元素两边离他最近的最大或最小元素,具体操作直接看题目。

2023-11-30 13:25:02 60

原创 Day49:647. 回文子串、516.最长回文子序列

其他的和上一题一样,就是递推公式不同。

2023-11-27 22:56:03 182

原创 Day48:583. 两个字符串的删除操作、72. 编辑距离

取最小值,则递推公式可简化为:dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。当word1[i - 1]=word2[j - 1],dp[i][j] = dp[i - 1][j - 1];当word1[i - 1]!增删:dp[i-1][j]+1,dp[i][j-1]+1。替换:dp[i-1][j-1]+1。

2023-11-27 20:54:47 67

原创 Day47:392.判断子序列、115.不同的子序列

这里初始化和之前的不太一样,因为当被包含的字符串s长度为0时,包含字符串的长字符t肯定会包含一个子串s,这时dp[i][0]都要初始化为1。,所以在递推公式内 dp[i][j]必须由左dp[i][j-1]推导来。dp[i][j]:下标范围0到i的s字符串在下标范围0到j-1的字符串内存在的数量。我觉得最难的就是递推公式了,花了很多时间去理解递推公式为什么要这样来,又为什么和。=t[j-1]时:dp[i][j] = dp[i - 1][j]当s[i-1]=t[j-1]时。很显然从上往下或者左上往右下。

2023-11-27 18:38:14 49

原创 Day46:1143.最长公共子序列、1035.不相交的线、53. 最大子数组和

dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]。当s[i-1]和t[j-1]不相等时,要么把s[i-1]去掉,比较。text1[i - 1] 与 text2[j - 1]相同,text1[i - 1] 与 text2[j - 1]不相同。即:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);从递推公式,可以看出有三个方向可以推出dp[i][j],分别是上,左和左上。

2023-11-27 17:50:45 43

原创 Day45:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

【代码】Day45:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组。

2023-11-25 20:35:29 173

原创 Day44:309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

持有股票:dp[0][0] = -prices[0],一定是当天买入股票。从递归公式上可以看出,dp[i]依赖于dp[i-1],所以是从前向后遍历。冷冻期:当天买了又卖当然还没到第二天冷冻期,这时候利润还是0。一模一样,只是多了手续费,买股票多扣点手续费就好了。同时需要一个冷冻期来表示什么时候可以买股票。冷冻期的出现让这道题需要多划分几个步骤出来,dp[i]:第i天买卖股票利润。当天卖出股票:当天买了又卖。保持没有股票:当天就没买。dp数组下标及其含义。

2023-11-25 17:59:21 53

原创 Day43:123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

其实推导dp数组的是有规律可循的,直接把繁琐过程变成for循环即可,和上一题差不多。1可以由1和2推出,2可以由2和1推出;3可以由3和2推出,4可以由4和3推出;差不多,看不懂可以去看我昨天的文章。

2023-11-24 15:22:41 347

原创 Day42:121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

只需要修改 dp[i][0]=max(dp[i-1][0],0-prices[i])为dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i])即可,因为它不要求只能买卖一次了,所以答案可以在dp[i-1][1]的基础之上继续购入股票。这道题和上一道题的答案几乎一模一样,唯一不同的就是这道题可以多次买卖股票。之前用贪心做过这道题,今天用动态规划来思考。

2023-11-24 15:15:57 42

原创 Day41:198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

这道题比上面那道题又加了一个档次,是二叉树和动态规划的结合运用,第一次见我也是一脸懵逼。可以使用一个map把计算过的结果保存一下,这样如果计算过孙子了,那么计算孩子的时候可以复用孙子节点的结果。这道题和上一道题几乎是一模一样,只不过是围成一个圈,那么这道题最重要的点就是,怎么避免偷的房间。而第一种情况包含在2和3情况里,直接讨论2和3情况即可,这样一个环形数组又变成了线型数组,和。

2023-11-23 14:12:51 117

原创 Day40:139.单词拆分、背包问题总结

01背包有限个种类数的物品,每个只有一个,装在有限个单一背包里一维数组基本上都是外层背包内层物品,外层循环从前到后遍历,内层循环从后向前遍历,以防重复计算等和分割子串最后一块石头的重量 II目标和一和零:这道题是二维的问题,有点抽象完全背包有限个种类数的物品,每个有无数个,装在有限个单一背包里组合问题一般外层循环是物品,遍历顺序从前到后;内层循环是背包,遍历顺序从前到后排列问题一般外层循环是背包,遍历顺序从前到后;内层循环是物品,遍历顺序从前到后对应题目:零钱兑换II。

2023-11-22 22:33:19 48

原创 Day39:70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

虽然每天只写两三道题,但是坚持一个月下来真的蜕变了不少,荒废了大一 一年的时光,我觉得也是有后悔在里面的,但人生本来就有遗憾,我会努力改变,迎接18天后的自己,加油!既然递归公式是 dp[i] += dp[i - j],那么dp[0] 一定为1,dp[0]是递归中一切数值的基础所在,如果dp[0]是0的话,其他数值都是0了。下标非0的dp[i]初始化为0,因为dp[i]是靠dp[i-j]累计上来的,dp[i]本身为0这样才不会影响结果。一样,递推公式一般都是dp[i] += dp[i - nums[j]]

2023-11-22 17:36:02 39

原创 Day38:518.零钱兑换II、377. 组合总和 Ⅳ

【代码】Day38:518.零钱兑换II、377. 组合总和 Ⅳ。

2023-11-21 11:06:14 64

原创 Day37:1049. 最后一块石头的重量 II、494.目标和、474.一和零

题目链接。

2023-11-20 22:41:43 45

原创 Day36:01背包理论基础、416. 分割等和子集

背包问题有很多,大致分类如下:其实可以发现如果把dp[i - 1]那一层拷贝到dp[i]上,表达式完全可以是:dp[i][j] = max(dp[i][j], dp[i][j - weight[i]] + value[i]);与其把dp[i - 1]这一层拷贝到dp[i]上,不如只用一个一维数组了,只用dp[j](一维数组,也可以理解是一个滚动数组)。只写了重要的数组推导过程一维数组416. 分割等和子集题目链接这道题可以看成背包价值就是物品价值,上面背包理论已经说的很清楚了

2023-11-19 18:33:04 23

原创 Day35:343. 整数拆分、96.不同的二叉搜索树

题目链接96.不同的二叉搜索树题目链接01背包理论基础前言背包问题有很多,大致分类如下:其实可以发现如果把dp[i - 1]那一层拷贝到dp[i]上,表达式完全可以是:dp[i][j] = max(dp[i][j], dp[i][j - weight[i]] + value[i]);与其把dp[i - 1]这一层拷贝到dp[i]上,不如只用一个一维数组了,只用dp[j](一维数组,也可以理解是一个滚动数组)。只写了重要的数组推导过程

2023-11-19 16:00:18 46

原创 Day34:62.不同路径、63. 不同路径 II

题目整体思路和上一题差不多,但是它有不允许通过的路径,所以遇到障碍物时需要禁止通过,则初始化和上一题有所不同,其他的都一致。

2023-11-17 15:52:52 611

原创 Day33:509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

确定dp数组以及下标的含义递推公式初始化遍历顺序举例推导dp数组。

2023-11-17 13:19:33 18

原创 Day32:738.单调递增的数字、968.监控二叉树

终于结束咯贪心算法。

2023-11-17 12:39:39 30

原创 Day31:435. 无重叠区间、763. 划分字母区间、56. 合并区间

这里有一个优化操作,就是把result直接push进新的容器,然后重叠则更新容器尾部元素的右区间,就不需要把数据先从本来的容器内取出来比较,比较后又放进去(太麻烦啦!贪心快结束咯,今天基本上都是重叠问题,还有一个字符串的区间问题,实在是难以想到呜呜呜,不过遇到字符串连续的问题都可以用哈希表试试。还是重叠区间问题,只不过不是删去重叠部分,而是合并问题。题目要求把重叠区域删去,和。

2023-11-15 18:05:50 23

原创 Day30:860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

能自己有思路,但不够成熟。

2023-11-14 10:52:28 31

原创 Day29:1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

贪心真的好难啊。

2023-11-13 22:59:27 32

原创 Day28:122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II

贪心算法没有规律可言,见多识广,还是要多写多做。

2023-11-11 12:15:56 27

原创 Day27:455.分发饼干、376. 摆动序列、53. 最大子序和

这道题有很多方法可以解决,重点是掌握思路,除了从小到大,也可以从大到小查找。

2023-11-10 16:49:26 25

原创 Day26:332.重新安排行程、51. N皇后、37. 解数独

其它问题:n皇后数独行程安排。

2023-11-09 15:21:58 32

原创 Day25:491.递增子序列、46.全排列、47.全排列 II

子集问题:不含重复元素的整数子集1含重复元素的整数子集2含重复元素的整数递增子集排列问题:无重复元素的子集全排列有重复元素的子集全排列2。

2023-11-08 22:00:39 43

原创 Day24:93.复原IP地址、78.子集、90.子集II

分割问题分割回文子串存整个字符串的一部分,依次向下切割复原IP地址存整个字符串,在原有基础上切割。

2023-11-07 11:35:33 29

原创 Day23:39. 组合总和、40.组合总和II、131.分割回文串

组合问题:N个数里面按一定规则找出k个数的集合在有n个无重复元素的数组里找k个和为sum的值(不能重复使用一个元素)组合1在有n个无重复元素的数组里找k个和为sum的值(可以重复用一个元素)组合2在有n个有重复元素的数组里找k个和为sum的值(不可以重复用一个元素)组合3在n个数组内分别找一个元素,其n个值和为sum组合4。

2023-11-06 22:25:22 25

原创 Day22:216.组合总和II、17.电话号码的字母组合

当digits字符串长度为零时直接return空白result容器。题目要求即为从x个数中选n个和为k数组成数组。

2023-11-04 22:36:14 32

原创 Day21:77.组合问题

终于进入回溯算法的学习阶段。回溯算法的题型大致分为五种:组合问题、分割问题、子集问题、排列问题、棋盘问题。今天是关于组合问题的回溯算法。

2023-11-03 16:43:38 27

原创 Day20:669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

二叉树的学习终于告一段落,太开心啦。

2023-11-02 20:23:13 36

原创 Day19:235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

今天的题目写的越来越熟练啦,加油加油加油!

2023-11-01 19:40:51 42 1

原创 Day18:530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。

2023-10-31 17:59:22 35 1

原创 Day17:654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

注意类似用数组构造二叉树的题目,每次分隔尽量不要定义新的数组,而是通过下标索引直接在原数组上操作,这样可以节约时间和空间上的开销。什么时候递归函数前面加if,什么时候不加if,其实就是不同代码风格的实现,一般情况来说:如果让空节点(空指针)进入递归,就不加if,如果不让空节点进入递归,就加if限制一下, 终止条件也会相应的调整pre应该要初始化NULL采用左中右顺序遍历。

2023-10-30 23:20:58 53 1

原创 Day16:513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树

还是采用遍历+回溯算法,但有一个更方便的效果就是把target目标值依次减去每个结点的value,当最后target变为0了,则找到了需要的路径。题目是要求寻找最深的左叶子结点,重点在于如何找到左叶子结点。106.从中序与后序遍历序列构造二叉树(不太懂)所以找到目标节点的第一步就是先找到。[1] ,且此节点应该是。

2023-10-28 21:34:27 43 1

原创 Day15:110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

题目为探讨二叉树高度,高度采用后序遍历,而深度采用前序遍历。因为高度需要得知左右子树的高度才能获得高度差,所以用后序遍历。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。3.确定单层递归的逻辑。

2023-10-27 23:44:14 39 1

原创 Day14:104.二叉树的最大、111.二叉树最小深度,222.完全二叉树结点个数

二叉树常用递归、迭代法。使用前序求的就是深度,使用后序求的是高度。二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)历遍多用后序遍历,迭代法等也可以实现,有时间再学习吧,晚安晚安。

2023-10-26 22:54:58 30

空空如也

空空如也

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

TA关注的人

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