- 博客(151)
- 收藏
- 关注
原创 最长回文子串(蓝桥云课)
其实这个题目可以用动态规划,但是动态规划忘记了,在考研,好长时间没有刷动态规划题了,只能刷点基础的了。这个题目用的是中心散点法,也就是定义一个点,把这个点往两边散开。
2025-02-18 21:01:19
146
原创 记录备战第十六届蓝桥杯的过程
2.今天又复习了一下bfs,感觉还是很不熟练,可能是那个过程我些许有点不熟悉,准备再看看bfs然后自己总结一下。1.学会了原来字符串也有比较方法,也就是字符串987 > 98 等等,可以解决拼最大数问题。标准的bfs模板代码如下。
2025-01-25 17:32:37
598
原创 LeetCode78:子集
在if里面,因为这个如果在if里面的话,那么每次都需要判断这个开始值大于nums.size()才能到result这个里面,也就是说,你的最终结果,是没有1, 2, 3 ,12 ,13等等的值的。结束条件:当这个开始值startindex大于数组的大小的话,也就是说当前已经遍历完了。这个时候就可以停止了。单层循环:这个里面就大有讲究,这个里面就是遍历到每一个值的时候,都需要把当前的值加入到path里面。这个题目就不是分割问题了,这个题目就是子集的问题,就是需要把每一个属于它的集合给列出来,包括空的。
2024-11-19 14:55:23
348
原创 LeetCode93:复原IP地址
单层循环:如果当前分割到i的话符合条件,那么就插入一个'.',因为ip地址有三个'.'嘛所以就当到达那个位置的时候,就加上一个点就行。结束条件:当pointsum等于3个的时候,那么我们就可以停止了。这个时候我们在去判断一下这个整体的ip地址,看看是否符合条件。这个题目仍然是用的回溯算法,首先就需要抽象成一棵树,我们发现这个树,其实也就是分割字符串的类型题。参数的设定:需要s这个字符串,分割位置startindex,小数点的数量pointsum。
2024-11-19 14:49:29
225
原创 LeetCode131:分割回文串
这个题目其实就是需要去做一个分割操作,用什么来表示分割的线呢?其实就是startindex这个值。当把这个回溯抽象成一棵树的时候,我们不难看出来,这个题目需要对于分割的把握严格。单层循环语句:这个就是从你分割的这个位置开始去遍历,用i++来往后面去判断这个是否回文。结束条件:如果你当先的分割线已经大于s这个字符串的大小了,那么就可以退出来了。参数的设定:这里需要string s, startindex这两个就好。最后:还需要编写一个回文的函数。
2024-11-19 14:43:26
286
原创 LeetCode40:组合总数II
这个题目和上一个组合分析不一样的是,这个题目每个数只能用一次,所以这个需要先对数组进行排序,为什么要排序呢,因为当你抽象成一个数的时候,这个时候如果不排序的话,那么你会得到之前就已经得到过的数组。单层循环语句:里面就是需要对于排序过的数组进行标记,比如[1, 1, 2],那么这个时候就特别需要注意这个1,1,不要让这个两个重复出现了。参数的设定:1.需要原数组,2.需要目标值,3.需要总和sum,4.需要bool类型的数组,用来标记。
2024-11-19 14:37:58
261
原创 LeetCode39:组合总和
这个代码其实就是和前面的组合总是是一样的,但是呢,主要一点是,这个for循环里面的backtracking的不是i + 1了,而是i,因为当前i可以去取当前的元素,而i + 1是不能去当前的元素的。
2024-11-17 16:06:38
306
原创 LeetCode77:组合(剪枝操作)
实际上这个代码没做什么改变,其实就是在原来的单层循环里面的区间(startIndex,n)这个区间做文章,也就是在这个里面去做一个剪枝的操作。什么是剪枝呢,也就是把一个题目抽象做一个树的话,那么我们再去寻找一些本来就已经知道不符合的条件了,再去做一个算法的剪枝操作即可。
2024-11-16 14:50:46
333
原创 LeetCode77:组合
这个题目其实也就是一个很经典的一个回溯算法题目,回溯有三部曲,第一个就是确定要传进去的参数,第二个就是需要确定结束条件,第三个就是写进入单层循环的条件语句。
2024-11-16 14:46:58
313
原创 洛谷:P1008 [NOIP1998 普及组] 三连击
这道题考验选手的两个能力,第一个是对于数据范围的把控,第二个是写出一个怎样去把这九个数都不重复且符合1:2:3这个比例。
2024-11-06 09:23:58
151
原创 Ambari里面添加hive组件
在添加hive组件之前需要做的事情,先在master这个虚拟机里面创建好hive先进入虚拟机里面进入mysql然后输入这个命令看看有没有自己创建的hive数据库有的话会显示下面这个样子没有的同学使用以下命令可以在MySQL中创建hive数据库(本人给的hive数据库密码是hive)
2024-10-30 10:30:57
1595
原创 LeetCode516:最长回文子序列
这个递推公式就是先看s[i] == s[j],如果相等的话,那么就dp[i][j] = dp[i + 1][j - 1] + 2,这个也就是把头部和尾部相等的也算上了,如果不相等话,那么再分成两个情况,第一个是让头部的元素往后走,但是尾部的元素不走,也就是dp[i + 1][j],第二种情况就是让尾部往前走,头部元素不走也就是dp[i][j - 1],这两个求一个最大值。返回值:这个返回的就是头部元素的位置和这个字符串末尾元素的位置。dp的含义:[i, j]最长回文子序列长度。
2024-10-30 09:19:53
373
原创 LeetCode647:回文子串
这个就是先判断s[i] == s[j]如果相等的话,看看是不是j-i<=1,其实你好好想想,既然s[i] == s[j],分成两个情况,第一个是j-i<=1这个情况了。因为你既然都s[i] == s[j]了,而且[i + 1, j - 1]这个区间还是会问,那么[i , j]肯定也是会问的。初始化:这个需要画一个2*2,来看这个需要怎样初始化,通过画一个2*2表格,来看dp[i - 1][j - 1]能通过哪个方向推导出来,然后分析,只需要都初始化为false即可。
2024-10-30 09:10:47
407
原创 LeetCode72:编辑距离
如果word1[i - 1]等于word2[i - 1]的话,word1删除,也就是dp[i - 1][j] + 1,然后就是word1添加元素,其实word1添加元素,那么是不是和word2删除元素是一样的,这个时候那么我们就直接转换成dp[i][j - 1] + 1就可以了,因为dp的j列其实也就是word2字符串长度的大小。在一个就是替换,这个替换的话,就需要dp[i - 1][j - 1] + 1,因为替换完变成一样的了,那么就需要再加一步操作就好,这个时候的长度是不会改变的。然后取最小的值就好。
2024-10-29 17:40:36
307
原创 LeetCode583:两个字符串的删除操作
这个其实还是这么判断嘛,这两个相同的话,那么就直接让两个字符串往前走即可,这个时候不需要删除,如果不相同的话,那么这个时候,第一种情况就是word1串删除,也就是dp[i - 1][j] + 1,第二种情况是dp[i][j - 1] + 1的操作,第三种就是这两个都执行删除操作,然后加上2,又因为是求最小的步数嘛,所以就需要这三个最小值即可。初始化:这个初始化其实是需要在dp[i][0]初始化成i,在dp[0][j]初始化成j,因为dp[i][j]这个需要我们有初始化的值,才能往后进行推导。
2024-10-29 17:03:55
402
原创 LeetCode115:不同的子序列
这个是因为先判断s[i - 1]==t[i - 1]的话,第一种情况就是我们的s和t串都往前走一个单位,这个算一个,然后再加上能够符合这个条件的方案,也即是dp[i - 1][j],这个就是t串不走了,但是s串能往前走,并且还相等的。这里就把dp[i][0] = 1;这个也需要我们去画一个2*2的方格,然后去看到这个dp[i][j]是从哪两个方向推导出来的,比如这个题,就可以从由上到下,由左到右推导出来这个公式,那么遍历顺序就直接从1开始就好。dp含义:以i-1为结尾的s中有以j-1为结尾的t的个数为。
2024-10-29 16:54:23
326
原创 LeetCode392:判断子序列
这个判断自序列其实就是和之前的判断公共子序列一样,就只是返回的值不一样,思路完全一模一样。这个题目其实和不相交的线也是一样的,不相交的线其实都可以转换为这个公共子序列问题来编写。
2024-10-24 14:24:15
339
原创 LeetCode1143:最长公共子序列
其实就是去后往前寻找一样的,然后相等的话就加1,如果不一样的话那就分两种情况,第一种就是text1比text2长,那么就需要dp[i - 1][j]这个来支撑,如果text2比text1长,那么就需要dp[i][j - 1]来支撑,所以就分成if和else了,返回值就是这两个大小就好。
2024-10-23 20:15:37
298
原创 LeetCode53:最大子数组和
dp的递推公式: dp[i] = max(dp[i - 1] + nums[i], nums[i]);,这个其实很好理解,dp[i - 1] + nums[i]也就是往前去寻找,然后加上本身的值,第二种是nums[i],也就是当前就从nums[i]开始。dp的含义:dp含义:dp[i]是以nums[i]结尾的最大连续子数组,这个也就是我们需要找到这个最大的子数组中的某一个元素作为结尾。初始化:这个初始化其实就是dp[0] = nums[0],没什么好说的,后面初始化0就可以,因为后面的值能被前面覆盖掉。
2024-10-23 20:05:42
263
原创 LeetCode718:最长重复子数组
这个dp的含义就是dp[i][j]是以i-1为结尾和j-1为结尾的最长重复子数组,为什么这个定义呢,是因为我们需要从后往前去寻找一个最大的重复的,这个其实和初始化也有一定关系,如果定义了i和j的话,那么初始化,就不能初始化为0了,这个时候你定义的dp递推公式就已经达不到最大的效果了。刚才上面也讲到了,如果dp的含义是i和j的话,那么我们初始化就要在多些两层for循环,然后去定义好dp[0][j]和dp[i][0]这一列和一行的初始化,如果我们含义是i - 1和j - 1的话,那么我们就可以初始化为0就好。
2024-10-22 21:06:34
281
原创 LeetCode674:最长连续递增序列
这个题目其实很好理解,只需要一个for循环就好,因为上一个不连续的需要两层for循环是因为需要有一个参数去在0-i的区间寻找最大值,这个就不需要,递推公式也只需要一个就好。
2024-10-22 16:26:16
218
原创 LeetCode300:最长递增子序列
dp递推公式:这个就是我们画一个数轴,如果我们要去找到一个最大的,那我们定好0到i这个区间,然后再用一个j来遍历,条件就是nums[i]>nums[j],然后去推导出来公式dp[i] = max(dp[j] + 1, dp[i]),dp[j] + 1是因为我们如果想让dp[j]和dp[i]相等,那么我们只能dp[j] + 1来等于dp[i],dp[i]的意思是,就是我们与dp[i]作比较,然后取一个最大值。初始化:dp[0] = 1, 因为就一个数嘛,那么就只有一种。
2024-10-21 13:46:36
308
原创 Python爬虫:urllib_ajax的get请求豆瓣电影前十页(08)
这个就是一个综合型的应用了,这个需要扎实的基本功和对于函数调用的理解,然后根据函数的编写去做一个页面的爬取,我们要先分析好网址域名和后面的参数的组成规律,然后再去爬取,在这里的前提先了解,怎么找到这个网址,到浏览器里面检查的network,往豆瓣网站往下拉,去寻找一个含有list的文件,在里面找请求的url,找到如下。我们发现页面和start是有规律可循的。规律就是 (page - 1)* 20。
2024-10-21 09:51:41
594
原创 Python爬虫:urllib_ajax的get请求豆瓣电影第一页(07)
这个其实就是爬虫入门的爬取豆瓣网页的基本框架了,这个很是需要作为一个经典的参考价值。
2024-10-21 09:45:59
125
原创 Python爬虫:urllib_post请求百度翻译(06)
这里就有一点要注意的是,要是你爬取下来的网站,你需要在post的请求数据,后面加上encode('utf-8'),防止爬取下来的数据解码,但是要是如果你的网站已经是unicode的格式了,那就不需要在encode('utf-8')这个格式了。
2024-10-21 09:43:46
524
原创 urllib_get请求的urlencode的方法(05)
如果爬取网页的话,出现了百度安全认证,需要在User-Agent的基础下加上Cookie,这个同样也能在浏览器的检查里的network能够找到。
2024-10-21 09:38:55
132
原创 买卖股票的最佳时机总结(动态规划)
这一类的变形题很多,更多的是我们要去思考这个题目的整体买卖路线,也就是持有和不持有的时候,需不需要再去细分,定义某些状态或者说一些很需要我们去定义的东西。这个其实就是K次,那么我们通过II来推算出,这个k次其实是有奇偶性规律的,然后我们推到到k就行。这个其实就是和最佳股票II一样,多了个小费,卖出的时候减去小费就行,没什么可说的。这唯一的不一样的就是把不持有的股票拆分成卖出股票,保持卖出股票和冰冻期的时候。这个其实我们就把这个拆分成两个状态就好,这个就可以直接通过状态转移去推到出来。
2024-10-20 16:44:16
422
原创 LeetCode714:买卖股票的最佳时机含手续费
这个题目其实就是卖卖股票II的变形,这个无非就是多了个小费,也就是在你卖出股票的时候,减去这个小费就好了。其他完全和买卖股票II一样。
2024-10-20 16:26:52
227
原创 LeetCode309:买卖股票的最佳时机含冷冻期
这个我们可以这么来看,就是我持有这个股票,那我前一天可以是持有,但我此时需要减去当前我买去这个股票的现金,第二个就是我们的股票是不是前一天也可能是卖出股票的状态,这个时候就是我们需要在保持卖出股票的状态减去现金,其次是不是我们也有可能在冷冻期的时候,也就是过完冷冻期刚好这一天,我给买下了这个股票,然后减去现金。这个就是我们的冷冻期,冷冻期的前一天肯定是卖出股票的状态的,因为卖出这个股票了,立马进入冷冻期了。//dp[i][1]保持卖出股票状态。//dp[i][2]卖出股票状态。//dp[i][3]冷冻期。
2024-10-20 13:28:27
319
原创 LeetCode188:买卖股票的最佳时机IV
思路没什么好说的,这个题目的关键就是怎么给你k值进行初始化数组而已,思路和买卖股票的最佳时机3一样。
2024-10-17 20:59:28
263
原创 LeetCode123:买卖股票的最佳时机III
这个就是要去取一个最大值了,那我要是当前持有的话,就要分两种情况,第一种是我之前就已经持有了,dp[i - 1][1], 第二个情况就是我之前就不持有,但我买了,所以就要不持有减去我买了股票的现金数,也就是 d p[i - 1][0] - prices[i]这个也是分两种情况,那我不持有,分两种情况,不持有的话那我之前就可能不持有,所以是dp[i - 1][2], 另一种情况是之前持有,所以我就要卖出去这个股票了,那我就要加上我当时卖出股票的钱。这个是我当前持有的,所以要买这个股票,要减去价钱。
2024-10-17 20:14:03
593
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人