自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 回文串系列总结

转移方程: 判断 s[i] 和 s[j] 是否相等 ,不相等的话肯定不是回文串,相等就要做判断了, 1.如果说长度 <=2 ,那么已经构成回文串了, 2. 若是 i j 夹住的那个序列也是回文子序列,那么 i j 夹住的也是回文子序列。若 s[i] == s[j] , 那么 直接加入即可 dp[i][j] = dp[i+1][j-1] + 2;注意每一个循环的起始值, j从i+1开始是因为若j不为i+1下面的dp[i+1][j-1] 会越界。那么 dp[i][j] 就代表 i j 中最长的回文串长度。

2024-06-04 17:40:54 342

原创 Leecode 139 单词拆分 回溯dp双解法

leecode 139

2024-06-01 16:42:51 315

原创 Leecode 134 加油站

假设从0站点出发,往后依次遍历,收集到一个站点时所剩余的油rest,若rest >0 则标识可以顺利到达那一站,若是rest<0则表明无法到达这一站,假设这一站是i ,那么说明[o,i]之间,sum(cost[i]) > sum(gas[i]) , 那么这个区间中的任何一个站点作为起点,到i站时都会因为rest<0 而无法到达i站 ,(因为前面已经知道中间的站能够到达,所以0-k之间的rest > 0 , 小于0的数减去大于0的数肯定小于0,所以在rest <0 时,将测试的下一站设置为i+1.

2024-05-22 23:53:44 189 1

原创 回溯算法总结 分割篇

那么如何切分一个序列呢, 在for循环中,我们将i的初始值设置为 startindex , 然后让i往后走, [startindex , i] 作为一个切分的序列,每切分一个序列要判断是否符合回文串的规则,若符合,则放入path集中,进入下一层递归,递归时使 startindex 为 i+1 ,从当前分割末尾的下一个位置继续分割。切割为四段的时候,那么.号为3,这也就标识了已经成功切割出一个符合条件的ip地址了。分割问题 是对一个序列进行切分的过程,切分出的符合的序列则放入结果集。

2024-05-22 17:20:21 242 1

原创 回溯算法总结 -组合篇

假设存在两个相邻的相同元素, 那么在同一树层中 它们表现为nums[i] = nums[i-1] ,在同一树层中,nums[i-1]会比nums[i]更先被遍历到,所以 当nums[i-1] 在本层进入递归的时候, used[i-1]为true , 而当它从递归返回到本层的时候,由于回溯, 它会被设为false ,所以,若 (nums[i-1] == nums[i] && used[i-1] == false)的时候,代表nums[i-1]在本层已经被选中过了,序列后面与它相同的元素都不应该再被选中。

2024-05-22 16:20:36 1641

原创 Leecode 236

【代码】Leecode 236。

2024-05-18 13:31:18 124

原创 Leecode654 最大二叉树

【代码】Leecode654 最大二叉树。

2024-05-17 20:15:10 130

原创 Leecode105前序中序构造二叉树

【代码】Leecode105前序中序构造二叉树。

2024-05-17 19:27:54 181

原创 Leecode 404左叶子之和

【代码】Leecode 404左叶子之和。

2024-05-17 17:04:20 119

原创 Leecode257二叉树所有路径

【代码】Leecode257二叉树所有路径。

2024-05-17 16:38:09 200

原创 Leecode 15三数之和

内层的while循环中,循环条件为 left < right,同样的,我们也需要对left 和 right 进行去重,那么如何去重呢,是进入循环时直接去重,还是找到一个三元组以后再去重呢?考虑一个刚开始便是[0,0,0]的三元组,若是再while循环刚开始对它进行去重的话,会导致left >= right ,从而漏过了这种情况,所以我们需要在找到一个三元组后,再进行去重。用双指针法,for循环中 , left = i+1,right = nums.size() -1;Leecode 15 .三数之和。

2024-05-17 14:29:51 285

原创 链表第二章

设置两个指针,首先分别指向虚拟头结点和head结点,再根据固定的顺序变换指针的指向。leecode 24 两两交换链表中的节点。leecode 19 删除倒数第n个结点。

2024-05-09 19:38:03 225 1

原创 数组part2

j 往前移动,当区间内的和大于target的时候,记录区间长度,并尝试减小其长度,使得i往后移动,并对sum执行减去nums[i]。循环往复,直到j到达终点。给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。这是一题蛮经典的模拟题,注意每次都是左闭右开,顺时针方向转一圈。双指针法是比较两端的值,因为平方以后最大值只会在两端出现。双指针法,i代表取的子区间的起点, j是取的子区间的终点。leecode 977.有序数组的平方。

2024-05-07 19:20:19 155

原创 打卡第一天 , LC704二分查找, 和LC27移除元素

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。接下来是双指针法的解法。

2024-04-17 16:05:28 773 1

原创 leecode 93 复原IP地址

首先,组成一个ip地址最少需要4个数字,最多12个数字,若输入的s的长度小于4 或者大于12 ,则必定不能组成合法的ip地址。这道题中如何判断数位是否是快乐数呢,哈希表来解决,题目中说了变不到1的数会无限循环,那么在循环的过程中一定有一个sum是曾经出现过的,若有出现过的sum,则表示这个数不是快乐数。使用unordered_set, 这是一个底层由哈希表实现的集合,每次计算出一个sum,在set中查询是否有记录的值,若没有,插入这个sum,若有,则表示这个数不是快乐数。首先,先复习一下对数位的操作。

2024-04-09 13:26:20 600

原创 重新开始之快排

好像自从上了研究生就没写过快排了 ,今天照着印象里的方法用c++写了一个,代码实现一定不算优雅,但是逻辑应该是清晰的。快排是一种在一般情况下性能稳定的排序算法,在排序序列基本有序的情况下会退化成O(n^2)的效率。递归应该遵循三步的方式来写, 首先要想递归的退出条件,不然会陷入无限递归,然后爆栈。ChooseWay用于选择此时应该移动的下标,true为右,false为左。这里的条件是子序列的长度大于等于2时继续递归,小于2即返回。今天就用经典的快排做开头吧。其他的逻辑就不赘述了。用下列程序测试如下结果。

2024-04-08 17:11:13 205

空空如也

空空如也

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

TA关注的人

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