自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 zipkin启动失败

为啥我命令行之后是这个样子。

2024-04-24 16:49:00 545

原创 链表题目:707. 设计链表 、 203. 移除链表元素、 237. 删除链表中的节点 、19. 删除链表的倒数第 N 个结点 、83. 删除排序链表中的重复元素 、 82. 删除排序链表中的重复元素

然后要求是倒数第n个,那我们先让cur走n个节点,然后按顺序往后遍历,当cur==null的时候,说明pre的下一个节点就是要删除的,就直接让pre.next = pre.next.next;定义一个节点cur指向head,然后开始遍历,当cur.val == cur.next.val,就让cur.next = cur.next.next。相比于上一题,我们要把重复的元素彻底删除,所以需要多定义一个nexts指针,执行cur.next。直接让当前节点的值变成下一个节点的值,指向下一个节点的下一个节点。

2023-11-29 14:59:19 536

原创 数组题目:118. 杨辉三角 、 119. 杨辉三角 II 、661. 图片平滑器 、598. 范围求和 II 、 419. 甲板上的战舰

这个黄色的2,下面也包含了[3,3],所以我们发现左上角的(0,0)肯定是累加之后最大的,所以我们需要找到右下角和(0,0)一样的情况,所以就看ops里面最小的数组。其实就是对应的每个点,看他八个邻居的值,如果在原数组的范围,就加起来求和,然后求平均值,如果超出就不加。比如第二行(从0开始)的2,是dp[1][0] + dp[1][1]。类似的找出对应的规律。找规律,每一行的第一个元素和最后一个元素都是1,其中中间需要改变的数找对应的规律。和上面一样,只是返回需要的那一行的数组。

2023-11-27 18:46:15 584

原创 数组题目:485. 最大连续1的个数 、 495. 提莫攻击 、414. 第三大的数 、628. 三个数的最大乘积、54. 螺旋矩阵 、 59. 螺旋矩阵 II 、498. 对角线遍历

全都为正数,答案就是nums[nums.length - 1] * nums[nums.length - 2] * nums[nums.length - 3],全都为负数,答案就是nums[nums.length - 1] * nums[0] * nums[1]如果前一段的中毒时间结束了,再次中毒的情况,比如[1, 2] duration = 2,第一段的中毒时间为[1, 2],第三秒是第二段中毒时间的起始时间,但是timeSeries[1]=2,所以第一段还没有结束,第二段就开始了。

2023-11-26 19:36:54 930

原创 数组题目:645. 错误的集合、 697. 数组的度、 448. 找到所有数组中消失的数字、442. 数组中重复的数据 、41. 缺失的第一个正数

我们定义一个Map,key 是数组里的数,value是一个数组,value[0]是指出现的次数,value[1]是指出现的第一次坐标,求数组的长度就用最后一次坐标减去第一次出现的坐标。然后我们遍历数组,从1开始,如果cnt[i] == 0 那就说明这个是错误的数,如果 cnt[i] == 2,那就说明是重复的数。然后遍历nums,如果nums[nums[i] - 1] == nums[i] ,那就说明他不是消失的数字。再遍历一遍原数组,如果当前遍历的元素是负的,就说明他是重复的,那就说明|x|是重复的。

2023-11-25 21:24:24 502

原创 数组题目: 665. 非递减数列、453. 最小移动次数使数组元素相等、283. 移动零、189. 旋转数组、396. 旋转函数

0,那我们就让nums[left]和nums[right]进行交换,再把Left增加。如果按照2的情况,当nums[i - 2] < nums[i],那我们就优先考虑把。如果按照1的情况,nums[i - 2] > nums[i],对于这个nums,由于2的出现导致非递减,更改的情况就是要么。对于这个nums,由于2的出现导致非递减,更改的情况就是要么。nums[i - 1]改成nums[i],nums[i]不动。对于这个nums,由于2的出现导致非递减,更改的情况就是。

2023-11-24 20:23:37 590

原创 代码随想录总结

目前个人刷题能力还只在二叉树这里,对了哈希表也是不太行。还是需要认真学习。对于贪心这方面,在卡哥这里只能说醍醐灌顶,思路清晰,希望之后可以再深入学习。动态规划可以说最折磨了,希望自己之后可以多深入学习吧。对了也准备学一学图论。

2023-09-24 19:04:50 142

原创 代码随想录 -- day60 -- 84.柱状图中最大的矩形

【代码】代码随想录 -- day60 -- 84.柱状图中最大的矩形。

2023-09-24 19:01:55 175

原创 代码随想录 -- day59 -- 503.下一个更大元素II 、42. 接雨水

【代码】代码随想录 -- day59 -- 503.下一个更大元素II 、42. 接雨水。

2023-09-24 19:00:45 144

原创 代码随想录 -- day58 -- 739. 每日温度 、496.下一个更大元素 I

【代码】代码随想录 -- day58 -- 739. 每日温度 、496.下一个更大元素 I。

2023-09-24 18:58:54 118

原创 代码随想录 -- day23 -- ● 669. 修剪二叉搜索树 、108.将有序数组转换为二叉搜索树 、538.把二叉搜索树转换为累加树

【代码】代码随想录 -- day23 -- ● 669. 修剪二叉搜索树 、108.将有序数组转换为二叉搜索树 、538.把二叉搜索树转换为累加树。

2023-09-20 20:02:52 249

原创 代码随想录 -- day57 -- 647. 回文子串 、516.最长回文子序列

【代码】代码随想录 -- day57 -- 647. 回文子串 、516.最长回文子序列。

2023-09-20 20:00:31 196

原创 代码随想录 -- day56 -- 583. 两个字符串的删除操作 、72. 编辑距离

【代码】代码随想录 -- day56 -- 583. 两个字符串的删除操作 、72. 编辑距离。

2023-09-20 19:58:13 211

原创 代码随想录 -- day55 --392.判断子序列 、115.不同的子序列

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];

2023-09-20 19:54:15 232

原创 代码随想录 --- day22 -- 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点

【代码】代码随想录 --- day22 -- 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、 450.删除二叉搜索树中的节点。

2023-09-17 13:09:24 294

原创 代码随想录 --- day21 --- 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

频率count 大于 maxCount的时候,不仅要更新maxCount,而且要清空结果集(以下代码为result数组),因为结果集之前的元素都失效了。判断逻辑是 如果递归遍历遇到q,就将q返回,遇到p 就将p返回,那么如果 左右子树的返回值都不为空,说明此时的中节点,一定是q 和p 的最近祖先。遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。而且初始化的时候pre = NULL,这样当pre为NULL时候,我们就知道这是比较的第一个元素。

2023-09-17 13:05:35 341

原创 代码随想录 -- day53 -- 1143.最长公共子序列 、1035.不相交的线、53. 最大子序和

如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]根据dp[i]的定义,很明显dp[0]应为nums[0]即dp[0] = nums[0]。

2023-09-17 12:59:45 103

原创 代码随想录 -- day52 --300.最长递增子序列 、674. 最长连续递增序列 、718. 最长重复子数组

如果 nums[i] > nums[i - 1],那么以 i 为结尾的连续递增的子序列长度 一定等于 以i - 1为结尾的连续递增的子序列长度 + 1。dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。即当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1;根据dp[i][j]的定义,dp[i][j]的状态只能由dp[i - 1][j - 1]推导出来。

2023-09-17 12:47:02 124

原创 代码随想录 -- day51 --309.最佳买卖股票时机含冷冻期 、714.买卖股票的最佳时机含手续费

那么dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]);所以:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i] - fee);所以:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i]);即:dp[i][2] = dp[i - 1][0] + prices[i];昨天卖出了股票(状态三)

2023-09-17 12:39:02 168

原创 代码随想录 -- day50 -- 123.买卖股票的最佳时机III 、188.买卖股票的最佳时机IV

选最大的,所以 dp[i][1] = max(dp[i - 1][0] - prices[i], dp[i - 1][1]);dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。所以dp[i][2] = max(dp[i - 1][1] + prices[i], dp[i - 1][2])使用二维数组 dp[i][j] :第i天的状态为j,所剩下的最大现金是dp[i][j]k次的交易 所以有2 * k次的情况,k次买入,k次卖出。

2023-09-13 18:44:04 167

原创 代码随想录 -- day49 -- 121. 买卖股票的最佳时机 、122.买卖股票的最佳时机II

dp[i][0] 表示第i天持有股票所得最多现金,dp[i][0] 表示第i天持有股票所得最多现金。dp[i][0] 表示第i天持有股票所得最多现金,dp[i][0] 表示第i天持有股票所得最多现金。和上面的不同在于可以多次买入卖出。

2023-09-12 10:54:14 159

原创 代码随想录 -- day48 -- 198.打家劫舍、213.打家劫舍II 、337.打家劫舍III

【代码】代码随想录 -- day48 -- 198.打家劫舍、213.打家劫舍II 、337.打家劫舍III。

2023-09-11 21:10:17 172

原创 代码随想录 -- day46 --139.单词拆分

递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。本题一定是 先遍历 背包,再遍历物品。

2023-09-09 20:39:24 147

原创 代码随想录 -- day45 -- 70. 爬楼梯 (进阶)、322. 零钱兑换 、279.完全平方数

递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j]);这里要注意,这是一个排列组合的问题,所以要先遍历背包再遍历物品。递推公式为:dp[i] += dp[i - j]

2023-09-09 20:37:03 165

原创 代码随想录 -- day44 -- 完全背包、518. 零钱兑换 II 、377. 组合总和 Ⅳ

完全背包的物品是可以添加多次的,所以要从小到大去遍历。

2023-09-08 15:15:04 82

原创 代码随想录 -- day43 -- 1049. 最后一块石头的重量 II 、494. 目标和、474.一和零

本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。public:i++) { // 遍历物品j--) { // 遍历背包。

2023-09-08 14:50:23 84

原创 代码随想录 -- day42 -- 01背包问题、416. 分割等和子集

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。如果使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒序遍历!因为题目中nums[i]是大于等于1 的 所以dp[0]是不会有结果的,所以dp[0] = 0。dp[j] 是容量为j的背包,所背的最大价值。,求解将哪些物品装入背包里物品价值总和最大。我们要求的是让两边子集相等。1、确定dp数组及下标含义。3、dp数组如何初始化。

2023-09-08 10:28:11 152

原创 代码随想录 -- day41 -- 343. 整数拆分 、96.不同的二叉搜索树

dp[i]:表示拆分数字i,所得到的最大的乘积。

2023-09-04 19:31:51 70

原创 代码随想录 -- day39 -- 62.不同路径 、63. 不同路径 II

这里要看一下递推公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1],dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。dp[i][j] = dp[i - 1][j] + dp[i][j - 1],因为dp[i][j]只有这两个方向过来。首先dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。只能从dp[i - 1][j] 和 dp[i][j - 1]这两个方向来算。所以我们就要加限制条件。

2023-09-02 20:23:44 143

原创 代码随想录 -- day37 -- 738.单调递增的数字 、968.监控二叉树 (过)

例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。例如:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。

2023-09-02 20:17:05 276

原创 代码随想录 -- day38 -- 509. 斐波那契数、70. 爬楼梯 、746. 使用最小花费爬楼梯

动态规划五部曲:dp[i]保存的是第i个数的对应结果题目已经告诉了 dp[i] = dp[i - 1] + dp[i - 2]dp[0] = 0, dp[1] = 1;从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的按照这个递推公式dp[i] = dp[i - 1] + dp[i - 2],我们来推导一下,当N为10的时候,dp数组应该是如下的数列:0 1 1 2 3 5 8 1

2023-09-01 21:22:52 200

原创 代码随想录 -- day36 -- 435. 无重叠区间 、763.划分字母区间 、 56. 合并区间

然后把排序完的第一个放入保存的结果的地方,int end = result.back()[1],这是第一个的右边界,然后开始遍历interval,从坐标为1的开始,如果他的左边界小于end,就要合并,让右边界为max(result.back()[1], intervals[i][1])。,因为这个最小值之前的部分一定是 区间1 和区间2 的重合部分,如果这个最小值也触达到区间3,那么说明 区间 1,2,3都是重合的。按照 [ [1,2], [2,3], [3,4], [1,3] ]假如我们按照右边界排序。

2023-09-01 21:13:31 377

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

排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]

2023-08-31 09:35:05 488

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

如果 ratings[i] > ratings[i + 1],此时candyVec[i](第i个小孩的糖果数量)就有两个选择了,一个是candyVec[i + 1] + 1(从右边这个加1得到的糖果数量),一个是candyVec[i](之前比较右孩子大于左孩子得到的糖果数量)如果ratings[i] > ratings[i - 1] 那么[i]的糖 一定要比[i - 1]的糖多一个,所以贪心:candyVec[i] = candyVec[i - 1] + 1。局部最优可以推出全局最优。

2023-08-26 11:21:45 589

原创 代码随想录 -- day32 -- 122.买卖股票的最佳时机II 、55. 跳跃游戏、 45.跳跃游戏II

i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。而 cover 每次只取 max(该元素数值补充后的范围, cover 本身范围)。如果 cover 大于等于了终点下标,直接 return true 就可以了。

2023-08-26 11:11:24 816

原创 代码随想录 -- day31 -- 455.分发饼干 、376. 摆动序列 、53. 最大子序和

针对以上情形,result 初始为 1(默认最右面有一个峰值),此时 curDiff > 0 && preDiff

2023-08-25 14:38:24 856

原创 代码随想录 -- day30 -- 332.重新安排行程 、51. N皇后、37. 解数独

一个机场映射多个机场,机场之间要靠字母序排列,一个机场映射多个机场,可以使用std::unordered_map,如果让多个机场之间再有顺序的话,就是用std::map 或者std::multimap 或者 std::multiset。拿题目中的示例为例,输入: [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]] ,这是有4个航班,那么只要找出一种行程,行程里的机场个数是5就可以了。1、确定递归函数和参数。2、135度没有棋子。

2023-08-24 20:55:25 960

原创 代码随想录 -- day29 -- 491.递增子序列、46.全排列、47.全排列 II

全排列就不用startIndex,直接从0开始。

2023-08-23 21:26:36 985

原创 代码随想录 -- day28 -- 93.复原IP地址 、78.子集 、90.子集II

我们在[startIndex, i]中截取来判断是否满足是IP地址,满足的话就在i + 1地方加一个".",记住继续递归的时候是从i + 2这个位置开始。因为被分成四段,所以pointNum为3个的时候是满足的,然后在判断是否可以作为IP,可以的话就加入result。其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。就是startIndex已经大于数组的长度了,就终止了,因为没有元素可取了。这个和之前的去重思路一样,树层上去重。剩余集合为空的时候,就是叶子节点。

2023-08-23 21:18:37 982

原创 代码随想录 -- day27 -- 39. 组合总和、40.组合总和II、131.分割回文串

此外我还定义了int型的sum变量来统计单一结果path里的总和,其实这个sum也可以不用,用target做相应的减法就可以了,最后如何target==0就说明找到符合的结果了,但为了代码逻辑清晰,我依然用了sum。这里依然是定义两个全局变量,二维数组result存放结果集,数组path存放符合条件的结果。可以使用双指针法,一个指针从前向后,一个指针从后向前,如果前后指针所指向的元素是相等的,就是回文字符串了。重复元素有两个类型:树枝上重复和树层上重复。回文子串是正着读和反着读都一样的字符串。

2023-08-22 18:47:11 1234

空空如也

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

TA关注的人

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