自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 macOS install redis遇到的bug(tar包,homebrew安装,守护进程redis.conf配置)

安装路径一般在 /usr/local/Cellar/redis/{version}或者/opt/homebrew/Cellar/redis/7.0.12/bin/里有redis-server。莫名其妙,但还是试着去安装了python tcl tk的包,useles,但看到有人说出现这个也不影响,之后确实可以make install。因为前端启动的redis server会在每次terminal或者ctrl c关闭后,就停止,我们采用守护进程就是希望可以后端持续运行,但是。发现没有conf文件,接着打开。

2023-08-03 10:39:16 1122

原创 day57|● 647. 回文子串 ● 516.最长回文子序列

dp[i][j] 表示子串 [i…j] 是否为回文子串当我们判断 [i…j] 是否为回文子串时,只需要判断 s[i] == s[j],同时判断 [i-1…j-1] 是否为回文子串即可需要注意有两种特殊情况:[i, i] or [i, i + 1],即:子串长度为 1(s = “a”) 或者 2 (s = “aa”)。所以加了一个条件限定 j - i < 2初始化默认为不匹配,false。

2023-07-31 18:17:37 169

原创 day56|● 583. 两个字符串的删除操作 ● 72. 编辑距离

如果不等,就表示需要删除,可以删除word1或者word2,如果同时删除word1[i-1] and word2[j-1],步数需要+2,但其实也包含在了dp[i-1][j]+1中,即可以在[0:j]中再删除word2[j-1]word1[i-1] = word2[j-1],不用任何编辑,继续看word1[0: i-2]和word2[0: j-2]之间的操作数。如果word1[i-1] = word2[j-1],那么就不用进行删除,只用看前面需要多少次删除。● 72. 编辑距离。

2023-07-31 13:58:24 232

原创 day55|● 392.判断子序列 ● 115.不同的子序列

双指针动态规划dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。

2023-07-30 22:08:07 112

原创 day53|● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和

Output: 3dp[i][j] :以的A,和的B,最长重复子数组长度为dp[i][j]。(特别注意: “以下标i - 1为结尾的A” 标明一定是 以A[i-1]为结尾的字符串 )注意这里i,j遍历从1开始,这是为了方便i=0,j=0的out of index之后情况处理会比较麻烦时间复杂度:O(n × m),n 为A长度,m为B长度空间复杂度:O(n × m)

2023-07-30 13:44:08 92

原创 day52|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

Output: 4这题看似简单,但感觉没想明白递增的判定(当前下标i的递增子序列长度,其实和i之前的下表j的子序列长度有关系)和递推的关系“子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序”。注意 这里是找递增子序列,他的递增可以是不连续的。注意是,和nums[j]比较(j在0到i之间),取最大的长度值并非dp[i] 与 dp[j] + 1进行比较,而是我们要。

2023-07-30 08:38:47 194

原创 day51|● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

状态二:保持卖出股票的状态(两天前就卖出了股票,度过一天冷冻期。或者是前一天就是卖出股票状态,一直没操作)这是细分了状态转移,尤其是not hold stock时的,刚卖出,冷冻期,持续not hold。这题我一开始的想法是,冷冻期代表着买入股票时受限,需要从i-2天的not hold来考虑购买。状态一:持有股票状态(今天买入股票,或者是之前就买入了股票然后没有操作,一直持有)状态四:今天为冷冻期状态,但冷冻期状态不可持续,只有一天!状态三:今天卖出股票。时间复杂度:O(n)时间复杂度:O(n)

2023-07-29 22:23:27 32

原创 day50|● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

这里是正常的处理流程, 其实就是第一次持有和卖出(类比股票i,-prices[i]),第二次持有和卖出(类比股票ii,持有股票也需要考虑前一天不持有股票的现金)注意:dp[i][1],表示的是第i天,买入股票的状态(即持有),并不是说一定要第i天买入股票,这是很多同学容易陷入的误区。使用二维数组 dp[i][j] :第i天的状态为j,所剩下的最大现金是dp[i][j]注意这里也可以有dp[i][0],即没有持有过股票,现金流为0的初始状态。大家应该发现规律了吧 ,除了0以外,偶数就是卖出,奇数就是买入。

2023-07-29 10:23:12 66

原创 day49|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

和上题相似,不同在于可以多次买卖,在推导dp[i][0]的时候,第i天买入股票的情况,所持有的现金可能有之前买卖过的利润,要基于昨天的情况减去当天购买的支出。从左边开始找到左边的最小值(让买入价尽量便宜),然后不断求最大的利润(保留最大值,取最大区间利润)其实一开始现金是0,那么加入第i天买入股票现金就是 -prices[i], 这是一个负数。对于每一天分为两种状态,即持有股票和不持有股票的最多现金,可以从i-1推出。不代表 买入,可以是保持了持有的状态。只能买卖一次股票,求最大利润。

2023-07-28 23:55:34 38

原创 day48|● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

如果抢了当前节点,那么左右孩子就不能抢,如果没有抢当前节点,那么就可以考虑抢不抢左右节点(注意是。dp[i]:考虑当前i以内的所有房屋,最多可以偷窃的金额为dp[i]。特殊情况,这里把偷不偷nums[0]单独分类考虑。空间复杂度:O(log n),算上递推系统栈的空间。这里递推的逻辑是一样的,不同的是成环之后的。时间复杂度:O(n),每个节点只遍历了一次。,因为要利用递归的返回值来做下一步递推。● 337.打家劫舍III。这题一直没想明白整个流程,● 213.打家劫舍II。

2023-07-28 22:14:13 104

原创 day46|● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

这里的物品是wordDict中的word,dp[j]想要得到,首先基于此前的dp,看遍历的物品word是不是结尾的子字符串,是就true。如果确定dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。dp[i] : 字符串长度为i的话,dp[i]表示到字符串长度i时有多少个连续word组成。● 关于多重背包,你该了解这些!● 背包问题总结篇!

2023-07-24 14:45:20 54

原创 day45|● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

爬楼梯:每次可爬一阶或二阶,用斐波拉契。一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶。问有多少种不同的方法可以爬到楼顶n呢?1阶,2阶,…m阶就是物品,楼顶就是背包。

2023-07-24 10:07:54 55

原创 day44|● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。01背包,倒序遍历背包容量完全背包,正序遍历背包容量在纯完全背包问题中,一维数组的两层for循环可以颠倒(只有纯完全背包)。倒序用的是“前面的状态”,这个前面的状态是没有加上当前物品的i-1上一层,而正序比较时用的“前面的状态”是已经遍历过,可能已经加入过物品的状态,即重复添加了当前物品。

2023-07-23 14:39:24 52

原创 day43|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。Output: 1。

2023-07-23 13:57:45 52

原创 day42|01背包问题,滚动数组,416. 分割等和子集

01背包就是有一个背包,限制容量/重量,且每个物品只能放一次,问最大价值。

2023-07-22 21:13:40 42

原创 day41|● 343. 整数拆分 ● 96.不同的二叉搜索树

自己想基本想不出来,因为过分关注二叉搜索树的性质和树的元素数值了,但这些并不重要,只要找到规律。实际上是在求,可以形成多少种不同的二叉树,而二叉树的结构和节点的布局是有规律的,如图。

2023-07-18 21:22:27 47

原创 day39|● 62.不同路径 ● 63. 不同路径 II

不同在于有障碍,所以一旦障碍就dp为0了,也要注意初始化,一旦有障碍,这一排或列剩下的都0, 即不能到达。注意这里简化版的初始化,特别是for循环的简化,加了and一旦不符合就会立刻break跳出。

2023-07-17 23:33:54 33

原创 day38|动态规划01|● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

时间复杂度:O(n)空间复杂度:O(n)

2023-07-17 14:13:14 36

原创 day37|● 738.单调递增的数字 ● 968.监控二叉树

第一次做只想着把从不递增部分开始变9,忽视了相等的情况。错误case:668841这个就是因为有相等的,一旦没有搞清flag位置,就会导致不递增。这里是把flag放在不递增时的那位的前一位,如果前面还有相等的会导致减一之后递减所以要继续前移flag。这就是while循环的意义,找到属于flag的位置再开始改变char方法二:简洁版这个就是从后向前遍历,但是保证了可以一直检测有没有递减,也就满足了情况332 -> 329 -> 299。

2023-07-16 23:04:42 50

原创 day36|● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

这种重叠问题都是要找有几个区间都是重合的,所以要用最小的右边界来判断之后的每一个。可以按照开始或者结束位置排序先按照右边界end位置排序,然后循环掉所有重叠的,仅保留一个区间(最小右边界的)也是按照右边界end排序,重叠没有操作(end已经是最小右边界),不重叠就是新的区间,更新end位置按照左边界排序,重叠就remove,不重叠就更新end,类似重叠区间射气球之前一直有问题是,没有在不重叠的时候更新end,只增长count,总是忘记终止位置。这是我的错误写法。

2023-07-16 21:09:07 31

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

用map来存钱局部最优:遇到账单20,优先消耗美元10,完成本次找零。(因为5既可以还10也可以20,所以多留5元)全局最优:完成全部账单的找零。

2023-07-15 18:50:35 37

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

局部:先让最小的负数转化为正数全局:用光k从最小开始转化负数都转化为正数,再次排序局部:只找数值最小的正整数进行反转全局:找到最大数组和简洁版,看完理了下思路,分两次处理(优先处理负数们,如果还有k就处理全正数的数组)

2023-07-15 15:26:14 23

原创 day32|● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

局部最优:收集每天的正利润全局最优:求得最大利润。时间复杂度:O(n)空间复杂度:O(1)

2023-07-15 01:22:21 27

原创 day31|贪心算法01|● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

思路:在满足孩子胃口的前提下,尽可能分配小的饼干给到他如果最大的饼干可以满足肚子最大的孩子,那就给他吃,同时比较下一个。如果最大的饼干不能满足肚子最大的孩子,那就让他饿着,然后看看能不能满足第二个孩子。(有点黑暗系,放弃小朋友)如果最小的饼干可以满足肚子最小的孩子,那就给他吃,同时比较下一个。如果最小的饼干不能满足肚子最小的孩子,那就扔掉饼干,看看下一个饼干能不能给他吃。(放弃的是饼干)

2023-07-15 00:17:46 34

原创 day30|● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独 ● 总结

【代码】day30|● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独 ● 总结。

2023-06-25 21:04:58 17

原创 day29|491.递增子序列 46.全排列 47.全排列 II

possible时间复杂度:O(n * 2^n)空间复杂度:O(n)

2023-06-24 21:35:11 44 1

原创 day28|● 93.复原IP地址 ● 78.子集 ● 90.子集II

方法一:用path存4段,再接起来方法二:直接append".",backtracking需要i+2来跳过“.”时间复杂度:O(3^4),IP地址最多包含4个数字,每个数字最多有3种可能的分割方式,则搜索树的最大深度为4,每个节点最多有3个子节点。O(n)

2023-06-24 15:54:54 55 1

原创 day27|39. 组合总和 40.组合总和II 131.分割回文串

回溯对总集合排序之后,如果下一层的sum(就是本层的 sum + candidates[i])已经大于target,就可以结束本轮for循环的遍历。回溯+剪枝(排序后,一旦大于target,停止遍历)或者时间复杂度:O(n * 2^n),注意这只是复杂度的上界,因为剪枝的存在,真实的时间复杂度远小于此空间复杂度:O(target)

2023-06-20 21:55:48 59

原创 day25|216.组合总和III 17.电话号码的字母组合

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]思路:两层for循环?回溯+剪枝时间复杂度:O(n * 2^n)空间复杂度:O(n)

2023-06-20 16:26:18 181

原创 day24|理论基础 77. 组合

【代码】day24|理论基础 77. 组合。

2023-06-20 10:41:18 17

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

思路:[1, 3]区间在二叉搜索树的中可不是单纯的节点3和左孩子节点0就决定的,还要考虑节点0的右子树。

2023-06-18 11:50:07 50

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

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节点 2 和节点 8 的最近公共祖先是 6方法一:递归法方法二:迭代法。

2023-06-16 11:09:44 82

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

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。方法一:有返回值,在左中右三个差值里求出最小。方法二:无返回值(优化)方法三:迭代法,中序遍历(需要再思考,背模版)

2023-06-15 22:34:35 37

原创 代码随想录day20|654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。

2023-06-14 19:52:13 53

原创 代码随想录day18|513.找树左下角的值 112.113 路径总和i和ii 105.106.从中序与前序后序遍历序列构造二叉树

思路:在树的最后一行找到最左边的值。优先左边搜索,然后记录深度最大的叶子节点,前序遍历(中后序也可以)递归层序遍历(更简单)这里有个疑问?回溯到底有没有必要?????

2023-06-13 23:42:04 61 1

原创 代码随想录day17|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false。

2023-06-12 21:50:37 50

原创 代码随想录DAY16|104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。Output: 3本题根节点的高度就是二叉树的最大深度,因而用后序遍历来计算树的高度。方法一:递归法,后序遍历返回条件:空节点简化方法二:递归法,前序遍历返回条件:叶子节点,前序遍历有回溯,前序方法三:迭代法,层序遍历。

2023-06-12 19:33:49 31

原创 代码随想录DAY15|102. 层序遍历 226.翻转二叉树 101.对称二叉树

题目链接:思路:需要借用一个来实现,,而用适合模拟也就是的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。

2023-06-10 20:48:39 43

原创 代码随想录Day14|二叉树|理论基础、递归遍历、迭代遍历、统一迭代

中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了处理顺序和访问顺序是不一致的。定义:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。

2023-06-10 16:37:15 60

原创 代码随想录Day12|栈与队列part3|239. 滑动窗口最大值、347.前 K 个高频元素、总结

缺省情况下priority_queue利用max-heap(大顶堆)完成对元素的排序,这个大顶堆是以vector为表现形式的complete binary tree(完全二叉树)。✨PriorityQueue(优先队列),在概念上,默认为小顶堆,元素单调递增排序。堆是一棵完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。大顶堆(堆头是最大元素),小顶堆(堆头是最小元素)。方法一:小顶堆,要统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素。

2023-06-08 16:20:30 42

空空如也

空空如也

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

TA关注的人

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