自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法设计与分析第一周题目

我们定义动态规划的dp数组,dp数组的大小为(m+1) * (n+1),其中m是s的长度,n为p的长度。动态数组dp[i][j]表示s的前i-1个元素是否和p的前j-1个元素匹配,若为True,则表示为匹配。定义一个回溯函数 backtrack(s, p, i, j),其中参数分别是原字符串 s,正则表达式 p,当前匹配的位置 i 和 j。首先判断当前位置是否遍历到了 s 和 p 的末尾。如果是的话,返回 True,表示已经匹配完成。

2023-10-03 16:35:16 173

原创 代码随想录训练营总结篇

我用数组模拟哈希表来完成这道题目,在笔试阶段我的成绩也算是中上流,这也为我成功被录取奠定了基础。去年跨考计算机,并且成功被录取,但是对于计算机的知识了解还不够深入,只学过大一下学期的C++(学到指针),和考研学的数据结构、计算机组成原理以及操作系统。尽管刷完代码随想录之后,有些算法已经忘记了,但是在CSDN上存在的记录也会是一段记忆,希望自己可以在算法的路上走得更远。在代码训练营刷题的两个月里,我从一个只懂理论、不会实现的“外行人”,成长为可以一遍通过动态规划题目的有经验的程序员,我真正学到了很多。

2023-04-16 16:17:21 802 1

原创 代码随想录训练营第60天|84.柱状图最大的矩形

对于柱状图最大的矩形,我们将用两种方法进行求解,其中暴力解法会超时,此处会给出解法,但是不可以解决改题目。

2023-04-15 21:32:22 136

原创 代码随想录训练营第59天|503.下一个更大元素Ⅱ、42.接雨水

力扣

2023-04-14 14:44:37 116

原创 代码随想录训练营第58天|739.每日温度、496.下一个更大元素Ⅰ

当遍历到一个新的元素时,我们将栈顶元素与当前元素比较,如果栈顶元素小于当前元素,那么栈顶元素的下一个更大元素就是当前元素。这种问题通常可以通过维护一个单调栈来解决,具体做法是将数组从左到右依次遍历,将每个元素压入栈中,并在压入之前弹出比它小(或大)的元素,同时记录下每个元素的答案。我们可以先遍历 nums2 数组,使用单调栈来找到每个元素的下一个更大元素,然后将结果存储到一个哈希表中。在单调栈中,每个元素都会被压入栈中,并且在压入之前,会先将栈中比它小(或大)的元素弹出栈,以保证栈内元素的单调性。

2023-04-13 14:05:56 337

原创 代码随想录训练营第57天|647.回文子串、516.最长回文子序列

动态规划

2023-04-12 16:13:50 503

原创 代码随想录训练营第56天|583.两个字符串的删除操作、72.编辑距离

动态规划,困难团

2023-04-11 16:26:23 493

原创 代码随想录训练营第55天|392.判断子序列、115.不同的子序列

动态规划子序列问题

2023-04-10 16:09:06 344

原创 代码随想录训练营第52天|1143.最长公共子序列、1035.不相交的线、53.最大子数组和

数组问题

2023-04-08 16:41:31 291

原创 代码随想录训练营第52天|300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

我们定义一个临时变量用于遍历并记录以nums[ii]结尾的可能最长子序列长度,如果当前数字nums[ii]大于遍历的nums[jj],此时就可以将nums[ii]加到nums[jj]后面,形成更长的子序列长度,因此,如果temp比dp[jj]+1(dp[jj]表示截止到nums[jj]最长的子序列长度)小的话,我们就令temp更新为dp[jj]+1。我们可以用dp数组来进行动态规划,用dp[ii]来记录以nums[ii]结尾的最长递增子序列,因此,最后我们返回dp数组的最大值即可。2.dp数组的推导公式,

2023-04-07 20:26:21 250

原创 代码随想录训练营第50天|309.最佳买卖股票时机含冷冻期、714. 买卖股票的最佳时机含手续费

买卖股票

2023-04-07 16:19:24 74

原创 代码随想录训练营第50天|123.买卖股票的最佳时机Ⅲ、188.买卖股票的最佳时机Ⅳ

买卖股票续集

2023-04-06 21:31:07 237

原创 代码随想录训练营第49天|121.买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ

因此,dp[ii][0]dp[ii][1]数组的含义为未持有与持有股票的最大现金。对于每一天的状况,我们给予它两种状态,持有股票以及没有持股票,用一个数组dp[ii][0]表示第ii天没有持股票,dp[ii][1]表示第ii天持有股票。对于第ii天,如果持有股票,那么如果想要收益最高,那么股票的价格应该更低,因此,如果今天的股票价格比之前记录的更低,那么我们让它进行更新,也就是让。1.dp二维数组的含义,dp[ii][0]表示第ii天没有持股票的最大金额,dp[ii][1]表示第ii天持有股票的最大金额。

2023-04-06 19:16:09 491

原创 代码随想录训练营第48天|198.打家劫舍、213.打家劫舍Ⅱ、337.打家劫舍Ⅲ

打家劫舍

2023-04-06 17:05:11 426

原创 代码随想录训练营第46天|139.单词拆分

背包问题完结篇

2023-04-04 21:57:52 49

原创 代码随想录训练营第45天|70.爬楼梯、322.零钱兑换、279.完全平方数

回溯

2023-04-04 20:55:33 344

原创 代码随想录训练营第44天|518.零钱兑换Ⅱ、377.组合总和Ⅳ

完全背包

2023-03-30 10:26:37 90

原创 代码随想录训练营第43天|1049.最后一块石头的重量Ⅱ、494.目标和、474.一和零

与昨天的分割等和子集类似,我们可以尽可能的将这些石头分割为重量相等的两个集合,最后求出两个集合的差即可。因此,我们可以按照昨天的动态规划的思路。1.创建一个dp数组,用于记录01背包内每个容量前提下可以装下的石头重量。2.推导公式为3.初始化数组dp,ii<stones[0]时dp[ii]=0,不然的话dp[ii]=stones[0].4.遍历顺序为从前向后遍历。

2023-03-29 16:15:00 57

原创 代码随想录训练营第42天|416.分割等和子集

很抽象

2023-03-28 10:48:54 121

原创 代码随想录训练营第41天|343.整数拆分、96.不同的二叉搜索树

对应的右子树的节点数为2,1,0.因此f(3)=f(0)*f(2)+f(1)*f(1)+f(2)*f(1)=5。对于二叉搜索树(加入节点数为n),如果新加入一个节点,我们可以将其放在根节点处,那么其左右子树可以设置为(0,n),(1,n-1),(2,n-2)……同理,若节点数为n时,f(n)=f(0)*f(n-1)+f(1)*f(n-2)+形如递推公式为f(n)=f(0)*f(n-1)+f(1)*f(n-2)++f(n-2)*f(1)+f(n-1)*f(0)。只有一个节点,子树的种类为f(1)=1,。

2023-03-27 09:14:30 217

原创 代码随想录训练营第38天|62.不同路径、63.不同路径Ⅱ

2.很显然对于任意一个非边缘位置,这个位置都可以从上面或者左面移动过来,因此,这个位置的方法数应该等于左边位置的方法数加上上面位置的方法数。我们进行第ii行判断时,如果ii,jj位置有障碍物,就让dp[jj]等于0,不然的话就让dp[jj]+=dp[jj-1],即可。1.对于dp数组,我们将其确定为二维数组,并且dp[ii][jj]表示到达ii,jj位置的方法数。1.对于dp数组,我们将其确定为二维数组,并且dp[ii][jj]表示到达ii,jj位置的方法数。1.确定dp数组,并且确定其含义。

2023-03-25 10:49:27 520

原创 代码随想录训练营第37天|509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

动态规划第一天,五步法

2023-03-24 20:49:32 350

原创 代码随想录训练营第37天|738.单调递增的数字、968.监控摄像头

贪心

2023-03-23 11:12:27 428

原创 代码随想录训练营第36天|435. 无重叠区间、763.划分字母区间、56.合并区间

我们变量这个数组,如果right<intervals[ii][0],也就是当前的有区间已经小于这个元素的左区间,这个元素与当前区间没有了交集,我们就将当前的left与right加入到结果数组中,并且更新left与right为该元素的区间。划分字母区间的逻辑为,定义左右指针,左指针代表上次划分的位置+1,右指针表示本次划分位置,当找到某个边界时,右指针减去左指针就是区间长度。对于合并区间,我们同之前的思路,先对其进行排序,如果两个区间的左区间相同,就让有区间大的放在前面,左区间不同,就让左区间小的放在左边。

2023-03-22 10:55:14 500

原创 代码随想录训练营第33天|860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球

因此我们从第二个气球判断,如果第二个气球的左边界大于了第一个气球的有边界,则一定需要一支弓箭,如果没有,则说明两个气球有重叠,我们可以省一支弓箭,我们将第二个气球的有边界设置为第一个气球和这个气球的有边界最小值,这样就可以避免第二个气球内含与第一个气球之中了。对于柠檬水找零,顾客只会给5,10,20元面值的钱,如果给到5元还好,如果给的是10或者20,我们则需要找零,就需要保证,面值为5或者10的钱够找才行。小于零,就返回false。遇到5元,则five++,遇到十元则,ten++,five–。

2023-03-21 11:21:56 583

原创 代码随想录训练营|1005.K次取反后最大化的数组和、134.加油站、135.分发糖果

贪心

2023-03-20 10:49:53 695

原创 代码随想录训练营第32天|122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ

贪心第二天

2023-03-18 10:56:23 1020 1

原创 代码随想录训练营第31天|455.分发饼干、376.摆动序列、53.最大子数组和

贪心

2023-03-17 20:18:35 1142 1

原创 代码随想录训练营第30天|332.重新安排行程、51.N皇后、37.解数独

究极难题

2023-03-16 14:20:05 967

原创 代码随想录训练营第29天|491.递增子序列、46.全排列、47.全排列Ⅱ

排序之后,对于相同元素,防止出现重复,我们优先使用相同元素的首元素,如果使用到一个元素时,我们先判断这个元素可不可以使用,如果它和前一个元素相同,并且前一个元素相同,我们就不使用该元素,同时,也有可能面临着好几个相同元素在一起的情况,因此我们需要连续判断。递增子序列也必须去重,就是对于给定数组nums中的元素,我们只需要其前面的元素,不判断后面相同的元素,因为两个相同的元素,后面能够组成的结果,后面也都能做到,因此,不再判断后面的元素。因此,我们先为给定数组排序,让他们按大小排序,方便我们进行处理。

2023-03-15 11:16:21 1037

原创 代码随想录训练营第28天|93.复原IP地址、78.子集、90.子集Ⅱ

回溯问题

2023-03-14 13:47:28 1130

原创 代码随想录训练营第27天|39.组合总和、40.组合总和Ⅱ、131.分割回文串

回溯回溯

2023-03-13 16:55:04 1171

原创 代码随想录训练营第25天|216.组合总和 Ⅲ、17.电话号码的字母组合

回溯

2023-03-11 14:36:10 1351

原创 代码随想录训练营第24天|77.组合(回溯的开端)

回溯回溯,加油加油

2023-03-10 11:17:27 1463 1

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

力扣

2023-03-09 10:38:53 1449

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

leetcode

2023-03-08 13:55:11 1557

原创 代码随想录算法训练营第21天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

leetcode

2023-03-07 14:18:04 32

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

leetcode

2023-03-06 13:46:26 1691

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

leetcode

2023-03-05 16:34:21 1725

原创 代码随想录算法训练营第17天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

二叉树

2023-03-04 16:20:14 1741

空空如也

空空如也

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

TA关注的人

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