自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曼巴的博客

机器学习

  • 博客(205)
  • 资源 (1)
  • 收藏
  • 关注

原创 leetcode-23. 合并 K 个升序链表

请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。ps:这道题看一眼代码,很好写出来。将它们合并到一个有序链表中得到。

2025-01-17 19:53:18 215

原创 leetcode-399. 除法求值

3.1)遍历图中该节点的连接点,如果等于尾节点,则返回当前权重;如果不等于,则dfs深度优先遍历,当前节点和尾节点,找到其关系。2)遍历queries,创建一个数组,用来记录当前元素是否遍历过【因为尾是一样的,头在遍历,没有意义】1)先通过defaultdict创建一个图,a/b=v,b/a=1/v,都保存到字典中。如果问题中出现了给定的已知条件中没有出现的字符串,也需要用。3.2)如果找到的权重值不为-1,则相乘,否则返回-1。未在等式列表中出现的变量是未定义的,因此无法确定它们的答案。

2024-10-27 23:15:24 663

原创 leetcode-621. 任务调度器

在第 3 个间隔,A 和 B 都不能完成,所以你需要待命。在第 4 个间隔,由于已经经过了 2 个间隔,你可以再次执行 A 任务。一种可能的序列为:A -> B -> idle -> idle -> A -> B -> idle -> idle -> A -> B。表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间。一种可能的序列是:A -> B -> C -> D -> A -> B。由于冷却间隔为 1,你可以在完成另一个任务后重复执行这个任务。返回完成所有任务所需要的。

2024-10-27 16:05:16 432

原创 leetcode-208. 实现 Trie (前缀树)

遍历word,如果没在,直接返回False;遍历到最后,如果是结尾字符,说明已找到。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。遍历word,如果没在字典里,就新建;4)startWith函数:和search函数类似,但不用在意是否有结尾字符。// 返回 False。// 返回 True。// 返回 True。// 返回 True。

2024-10-27 15:09:27 339

原创 leetcode-146. LRU 缓存

5)put操作:如果key在hash字典里,就更新该key在hash字典里的value,并将其移动到队尾;如果没在过,就先看是否当前的hash字典已经满足容量里,如果满足:则移除头节点后面的节点,之后进行缝合;之后插入的位置前节点指向该节点,后面的节点指向该节点。// 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}// 缓存是 {1=1, 2=2}// 返回 -1 (未找到)lRUCache.put(1, 1);

2024-10-26 16:46:31 1009 1

原创 leetcode-312. 戳气球

每个气球上都标有一个数字,这些数字存在数组。超出了数组的边界,那么就当它是一个数字为。现在要求你戳破所有的气球。学习i,j,k各自for循环的范围。相邻的两个气球的序号。求所能获得硬币的最大数量。

2024-10-11 20:41:13 421

原创 leetcode-301. 删除无效的括号

ps:加入start变量,是为了每次不重复从索引0开始运行,而是按索引顺序往下回溯。3)回溯,先写终止条件;,删除最小数量的无效括号,使得输入的字符串有效。2)写一个函数,用来判断当前字符串是否是有效的括号。1)先遍历字符串,分别找到左,右括号的异常个数。给你一个由若干括号和字母组成的字符串。返回所有可能的结果。代码使用的是官方第一种解法。

2024-10-11 19:17:20 344

原创 leetcode-297. 二叉树的序列化与反序列化

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。反序列化需要一个全局变量,来记录遍历到哪个字符了。

2024-10-11 15:40:04 236

原创 leetcode-239. 滑动窗口最大值

2)pop函数:滑动窗口,需要逐次把最左边的数排出去;当时当前队列中只保留一部分从大到小的值【有些数在push操作中被去掉了】;所以当要排出去的数和队首的数一样时,则pop()1)push函数:队列要始终保持一个从大到小的列表,所以push操作的时候,需要把比当前值小的值,pop出去。的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。需自己构建一个队列,写清楚pop,push,front3个函数即可。滑动窗口的位置 最大值。滑动窗口每次只向右移动一位。

2024-10-10 20:34:07 380

原创 leetcode-124. 二叉树中的最大路径和

维护一个全局变量 maxSum 存储最大路径和,在递归过程中更新 maxSum 的值,最后得到的 maxSum 的值即为二叉树中的最大路径和。1)先计算每个节点的最大贡献值【就是在以该节点为根节点的子树中寻找以该节点为起点的一条路径,使得该路径上的节点值之和最大】被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。2)该节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值,是路径中各节点值的总和。

2024-10-10 17:36:32 215

原创 leetcode-85. 最大矩形

的二维二进制矩阵,找出只包含。的最大矩形,并返回其面积。【先做84题,在做本题】最大矩形如上图所示。

2024-10-10 16:32:21 254

原创 leetcode-84. 柱状图中最大的矩形

1)本题是要找每个柱子左右两边第一个小于该柱子的柱子,所以从栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序。2)height数组,头尾需要补0,要不遇到升序,降序的数组不会进行if else里的逻辑。个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。,栈顶和栈顶的下一个元素以及要入栈的三个元素组成了我们要求最大面积的高度和宽度。求在该柱状图中,能够勾勒出来的矩形的最大面积。这道题和接雨水差不多,优先做接雨水。最大的矩形为图中红色区域,面积为 10。

2024-10-09 16:52:47 254

原创 leetcode-76. 最小覆盖子串

最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。1)设置一个字典,保存t里每个字符出现的次数;t 中两个字符 'a' 均应包含在 s 的子串中,3)如果less为0,说明此时遍历的s,已经包含了t。5)排掉最左边的元素,同时进行字典和less的还原。因此没有符合条件的子字符串,返回空字符串。2)在遍历s,修正字典里每个字符出现的次数。所有字符的子串,则返回空字符串。4)计算最短的长度,保留首尾的下标。整个字符串 s 是最小覆盖子串。所有字符的最小子串。

2024-10-09 14:59:55 466

原创 leetcode-42. 接雨水

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。ps:实际在代码循环中,每次计算的面积是:红线箭头所指的面积。,栈顶和栈顶的下一个元素以及要入栈的元素,三个元素来接水。个非负整数表示每个宽度为。

2024-10-08 20:08:15 399

原创 leetcode-32. 最长有效括号

1)遍历字符串,如果是左括号,就直接入栈;如果是右括号且栈里已经有括号了,说明已经有成对的括号出现了;将栈的顶部括号pop出来,当前的也放入res数组里。的字符串,找出最长有效(格式正确且连续)括号。3)接下来,在res数组里,找到最长的。最长有效括号子串是"()()"最长有效括号子串是"()"一般括号问题都需要一个辅助栈。2)对res数组进行排序。

2024-09-30 15:35:33 374

原创 leetcode-10. 正则表达式匹配

因为'*'代表可以匹配零个或多个前面的那一个元素,在这里前面的元素就是'a'。因此,字符串"aa"可被视为'a'重复了一次。".*"表示可匹配零个或多个('*')任意字符('.')。"a"无法匹配"aa"整个字符串。动态规划,这道题挺难理解的。的,而不是部分字符串。,请你来实现一个支持。

2024-09-23 19:52:59 476

原创 leetcode-4. 寻找两个正序数组的中位数

合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。合并数组 = [1,2,3] ,中位数 2。请你找出并返回这两个正序数组的。的正序(从小到大)数组。算法的时间复杂度应该为。二分查找,参考官方题解。

2024-09-17 23:23:26 267

原创 leetcode-560. 和为 K 的子数组

2)字典记录:当前位置累加和出现的次数。PS:需初始化{0:1}3)遍历数组,如果前缀和-k在字典中,count+=字典中的次数。子数组是数组中元素的连续非空序列。1)变量pre用来记录前缀的累加和。

2024-09-17 17:54:30 390

原创 leetcode-581. 最短无序连续子数组

你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。2)两个数组先从start开始对比,找到不一样的数字。3)两个数组再从end开始对比,找到不一样的数字。子数组,并输出它的长度。1)先构建一个有序数组。

2024-09-12 16:46:01 302

原创 leetcode-647. 回文子串

3)遍历顺序:一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。6个回文子串: "a", "a", "a", "aa", "aa", "aaa"当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况。三个回文子串: "a", "b", "c"是字符串中的由连续字符组成的一个序列。是正着读和倒过来读一样的字符串。

2024-09-12 14:32:38 518

原创 leetcode-617. 合并二叉树

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;1)如果没有root1,return root2。2)如果没有root2,return root1。null 的节点将直接作为新二叉树的节点。合并过程必须从两个树的根节点开始。3)根结点处理:两节点值加和。4)遍历两棵树的左节点。5)遍历两棵树的右节点。返回合并后的二叉树。

2024-09-11 19:40:21 323

原创 leetcode-739. 每日温度

4)当单调栈的数组不为空,且当前的数值持续比栈顶元素数值大,就将单调栈的栈顶元素pop出来,并记录结果到result里,3)从第一个温度数组里遍历,如果当前数值小于等于单调栈里的栈顶元素,将当前数据push到result数组里。天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。PS:栈保存索引,对比大小是temperatures里的数值。2)单调栈里面保存的是温度数组的索引,初始化为0。,表示每天的温度,返回一个数组。1)初始化结果数组,全都为0。

2024-09-09 19:55:55 395

原创 leetcode-543. 二叉树的直径

无非在求最大深度的代码中,加入了一个求直径的过程。直径等于左子树深度+右子树深度+1,每次和预先设置好的最大值进行比对。PS:最后返回的是self.res-1,因为我们记录的一直都是节点的个数,直径等于节点个数-1,求边的个数。3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。这条路径可能经过也可能不经过根节点。是指树中任意两个节点之间最长路径的。给你一棵二叉树的根节点,返回该树的。这道题,很容易可以做出本题。由它们之间边数表示。

2024-08-20 20:28:06 320

原创 leetcode-538. 把二叉搜索树转换为累加树

树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。2)之后先更新这个变量,self.res += root.val。3)更新根节点的值:root.val = self.res。4)其他的只要先遍历右子树,再遍历左子树就行。1)需要设置一个记录全局累加的变量。的新值等于原树中大于或等于。唯一困难的地方:中间的两行代码。反序中序遍历,使用递归。

2024-08-20 19:56:46 485

原创 leetcode-494. 目标和

2)之后就和分割等和子集一样的遍历方法【先遍历物品,再遍历背包】出现1就看dp[4]的方法有多少种。1)首先计算出,正数的总和是多少【作为背包的总重量】(sum(nums)+target)// 2。输入:nums = [1,1,1,1,1], target = 3。输入:nums = [1], target = 1。解释:一共有 5 种方法让最终目标和为 3。返回可以通过上述方法构造的、运算结果等于。,然后串联起所有整数,可以构造一个。向数组中的每个整数前添加。PS:初始化dp[0]=1。

2024-08-20 14:29:22 333

原创 leetcode-461. 汉明距离

指的是这两个数字对应二进制位不同的位置的数目。异或运算,返回count('1')的数量即可。上面的箭头指出了对应二进制位不同的位置。,计算并返回它们之间的汉明距离。输入:x = 1, y = 4。输入:x = 3, y = 1。

2024-08-18 22:25:43 436

原创 leetcode-448. 找到所有数组中消失的数字

2)再次遍历数组,看哪个索引对应的数值还是大于等于0的,说明他在上一轮中没有出现过。返回索引+1,即为未出现的数。PS:其中,两处的abs(num)必须加,这不是取绝对值。不加的话,for循环输出的num是:数字的存储地址。1)遍历数组,把数字-1的索引对应的数字,取相反数【变成负数】输入:nums = [4,3,2,7,8,2,3,1]中的数字,并以数组的形式返回结果。输入:nums = [1,1]

2024-08-18 22:16:12 337

原创 leetcode-438. 找到字符串中所有字母异位词

3)后面使用滑动窗口的方式,前一个去掉,后一个加上,去校验当前s窗口和p,是否所包含字母的出现次数一致。起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。输入: s = "abab", p = "ab"

2024-08-18 21:31:39 348

原创 leetcode-437. 路径总和 III

不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。和等于 8 的路径有 3 条,如图所示。,求该二叉树里节点值之和等于。给定一个二叉树的根节点。

2024-08-18 18:23:27 314

原创 leetcode-416. 分割等和子集

因为:数组中的元素都是正整数,如果是奇数的话,除以2,是两个小数的和了。4)dp数组遍历顺序,如果使用一维dp数组,外层循环遍历物品,内层循环遍历背包,且需从大到小遍历背包,已防重复。2)题目中找到子集的和是sum(nums)//2,即为存在等和自己的。3)初始化:如果题目给的价值都是正整数那么非0下标都初始化为0就可以了,如果题目给的价值有负数,那么非0下标就要初始化为负无穷。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。解释:数组可以分割成 [1, 5, 5] 和 [11]。

2024-08-18 17:48:35 334

原创 leetcode-406. 根据身高重建队列

因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]2)遍历排好序的数组,按照k值的索引进行插入即可。

2024-08-16 17:18:00 351

原创 leetcode-394. 字符串解码

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。输入:s = "2[abc]3[cd]ef"输入:s = "abc3[cd]xyz"输出:"abcabccdcdcdef"输入:s = "3[a]2[bc]"输入:s = "3[a2[c]]"输出:"abccdcdcdxyz"输出:"accaccacc",表示其中方括号内部的。输出:"aaabcbc"

2024-08-14 14:15:24 230

原创 leetcode-347. 前 K 个高频元素

3)否则,比较进来元素的次数如果大于堆顶的频率的话,就先将刚进来的元素放进去,之后pop栈顶元素(heapq.heappushpop:先放进,再pop)2)用小根堆,如果当前小根堆保留长度小于k个,刚进来的元素直接放进去就可以。输入: nums = [1,1,1,2,2,3], k = 2。输入: nums = [1], k = 1。1)先用字典保存每个数出现的次数。,请你返回其中出现频率前。

2024-08-11 23:49:29 213

原创 leetcode-338. 比特位计数

动态规划,分为奇数和偶数处理。奇数比前面的偶数多一个1;偶数和除以2对应的偶数一样多。输出:[0,1,1,2,1,2],计算其二进制表示中 1。输出:[0,1,1]

2024-08-11 19:11:26 228

原创 leetcode-337. 打家劫舍 III

之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。动态规划,后序遍历【使用一个长度为2的数组,记录当前节点偷与不偷所得到的的最大金钱】小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为。小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7。小偷一晚能够盗取的最高金额 4 + 5 = 9。,小偷能够盗取的最高金额。

2024-08-11 18:54:44 223

原创 leetcode-309. 买卖股票的最佳时机含冷冻期

设计一个算法计算出最大利润。解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。dp数组是2维,一共4个状态,根据4个状态去写对应的转换公式。输入: prices = [1,2,3,0,2],这里写的很详细【确定好4个状态】输入: prices = [1]最后取状态2,3,4中最大的返回。

2024-08-11 17:46:49 310

原创 leetcode-300. 最长递增子序列

是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。解释:最长递增子序列是 [2,3,7,101],因此长度为 4。动态规划,虽然不是背包问题,但做完完全平方数,感觉会好做一点这题。输入:nums = [10,9,2,5,3,7,101,18]公式:dp[i] = max(dp[i], dp[j]+1)输入:nums = [7,7,7,7,7,7,7]输入:nums = [0,1,0,3,2,3],找到其中最长严格递增子序列的长度。

2024-08-11 17:13:55 200

原创 leetcode-287. 寻找重复数

这个视频讲解的很好,也叫抽屉原理。有4个笼子放5只鸽子,至少有一个笼子里放2只鸽子。输入:nums = [1,3,4,2,2]输入:nums = [3,1,3,4,2]输入:nums = [3,3,3,3,3]),可知至少存在一个重复的整数。你设计的解决方案必须。

2024-08-11 16:41:33 399

原创 leetcode-283. 移动零

ps:左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。2)fast不断向后移动,遇到0就加1;否则和slow指针的元素互换。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。输入: nums = [0,1,0,3,12]1)初始化slow,fast两个指针。输出: [1,3,12,0,0]输入: nums = [0],编写一个函数将所有。

2024-08-11 15:32:34 182

原创 leetcode-279. 完全平方数

是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。动态规划公式:dp[i] = min(dp[i], dp[i-j*j]+1)背包问题,先遍历背包,再遍历物品。解释:12 = 4 + 4 + 4。解释:13 = 4 + 9。的完全平方数的最少数量。

2024-08-11 15:04:33 287

支持向量机公式推导ppt

支持向量机公式推导过程的ppt,有利于初学者公式的理解。通过ppt一步步演示,可以更清晰地看清每步的过程

2018-11-21

空空如也

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

TA关注的人

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