自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 四数相加贰——哈希表

给你四个整数数组 、、 和 ,数组长度都是 ,请你计算有多少个元组 能满足:示例 1:输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输出:2解释:两个元组如下:1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 02. (1, 1, 0, 0) -> nums1[1] + nums

2025-12-12 16:08:38 132

原创 快乐数——哈希表

编写一个算法来判断一个数n是不是快乐数。如果n是快乐数就返回true;不是,则返回false。思路:不容易判断的点在于的情况。

2025-12-12 11:32:49 253

原创 有序数组的平方——双指针

给你一个按排序的整数数组nums,返回组成的新数组,要求也按排序。平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]

2025-12-12 11:14:43 138

原创 编辑距离——多维动态规划

给你两个单词 和 , 请返回将 转换成 所使用的最少操作数 。你可以对一个单词进行如下三种操作:示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')思路dp[i,j] 表示 wo

2025-12-03 11:01:11 542

原创 寻找重复数——环形链表

给定一个包含n + 1个整数的数组nums,其数字都在[1, n]范围内(包括1和n),可知至少存在一个重复的整数。假设nums只有,返回。你设计的解决方案必须数组nums且只用常量级O(1)的额外空间。23。

2025-12-02 15:28:07 378

原创 下一个排列

整数数组的一个就是将其所有成员以序列或线性顺序排列。arr[1,2,3][1,3,2][3,1,2][2,3,1]整数数组的是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。[1,3,2][3,1,2][1,2,3][3,2,1]给你一个整数数组nums,找出nums的下一个排列。必须。

2025-12-02 11:40:50 542

原创 颜色分类——三路快排

给定一个包含红色、白色和蓝色、共n个元素的数组nums对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数01和2分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。[0,1,2]

2025-12-01 16:11:36 458

原创 多数元素——摩尔投票

给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。32。

2025-12-01 15:05:09 224

原创 只出现一次的数字——位运算

给你一个整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。14。

2025-12-01 14:51:18 148

原创 最长公共子序列——多维动态规划

给定两个字符串text1和text2,返回这两个字符串的最长的长度。如果不存在,返回0。一个字符串的是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。"ace""abcde""aec""abcde"两个字符串的是这两个字符串所共同拥有的子序列。3最长公共子序列是 "ace" ,它的长度为 3。

2025-11-28 17:03:29 434

原创 最长回文子串——区间DP

给你一个字符串s,找到s中最长的回文子串。"bab""aba" 同样是符合题意的答案。

2025-11-28 16:49:50 171

原创 最长有效括号——动态规划

给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号 子串 的长度。左右括号匹配,即每个左括号都有对应的右括号将其闭合的字符串是格式正确的,比如"(()())"。s = "(()"2最长有效括号子串是 "()"

2025-11-25 11:05:15 535

原创 分割等和子集——01背包

给你一个的数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]

2025-11-25 10:47:47 242

原创 乘积最大子数组

请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。注意:因为可能存在负值,而偶数个负值相乘可以变成正值。所以乘积最大值可能来自前一个。cur_max[i] 表示以 nums[i] 为结尾的连续子数组的乘积最大。,一个只包含一个元素的数组的乘积是这个元素的值。子数组 [2,3] 有最大乘积 6。还可能和前面的数据无关,是。所以还需要一个最小值的数组。测试用例的答案是一个。

2025-11-25 10:24:01 190

原创 最长递增子序列——贪心+二分查找

给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。4最长递增子序列是 [2,3,7,101],因此长度为 4。

2025-11-21 15:53:46 337

原创 完全平方数——有限深度搜索

给你一个整数n,返回和为n的完全平方数的最少数量。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149和16都是完全平方数,而3和11不是。n = 123。

2025-11-21 11:38:10 216

原创 爬楼梯——矩阵快速幂

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶。

2025-11-17 20:44:05 465

原创 划分字母区间——存放字母时哈希表可用数组实现

给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串"ababcc"能够被分为,但类似或的划分是非法的。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回一个表示每个字符串片段的长度的列表。[9,7,8]划分结果为 "ababcbaca"、"defegde"、"hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。

2025-11-13 11:20:47 208

原创 跳跃游戏二——贪心

跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳3步到达数组的最后一个位置。思路: while 每一次循环,就对应 当前的step值。step=1,对应 [1,2]向后跳转的最大长度。换句话说,如果你在索引。如 step=0,对应 [0,0]测试用例保证可以到达。每一次step+1,对应的。处,你可以跳转到任意。初始位置在下标 0。

2025-11-13 10:27:36 301

原创 数组中的第K个最大元素——快排and堆排序

就是。

2025-11-11 12:35:35 414

原创 柱状图中最大的矩形——单调栈的集大成者

个非负整数,用来表示柱状图中各个柱子的高度。但是在while循环里确定右边界的时候,等于被认定成了可以是右边界,这就出错了。相等的这些元素里,最右边那个的结果一定是正确的,最后也可以得到最终的结果。计算以每根柱子为高的最大矩形面积,并取所有柱子中的最大值作为结果。这样每个柱子的左右边界都能在一次线性遍历中确定,最后根据。按理说 中间两个 4 的返回结果应该是一样的,问题出在了。求在该柱状图中,能够勾勒出来的矩形的最大面积。每一次的计算结果:[4, 4, 8, 6]。最大的矩形为图中红色区域,面积为 10.

2025-11-05 11:02:10 583

原创 每日温度——单调栈

保存温度下标,当遇到比栈顶下标对应温度更高的温度时,就弹出栈顶,计算两者的下标差作为等待天数。天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。,表示每天的温度,返回一个数组。

2025-11-05 10:28:16 169

原创 字符串解码

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。前必须有数字,所以如果没有,需要先 push 一个 1。给定一个经过编码的字符串,返回它解码后的字符串。测试用例保证输出的长度不会超过。,表示其中方括号内部的。

2025-11-05 10:01:03 208

原创 最小栈——双栈

操作,并能在常数时间内检索到最小元素的栈。思路:一个是正常的栈,另一个是最小栈。

2025-11-04 20:55:57 115

原创 有效的括号——学习优秀的代码风格

判断字符串是否有效。

2025-11-04 20:48:26 105

原创 寻找两个正序数组的中位数

③边界数值一共四个,left1、left2、right1、right2。,在满足③的情况下,就能保证 可能构成 中位数 的一些元素 出现在 i j 所造就的边界上。i=0 表示:分隔线 在 0 的左侧,nums1 左半部分为空,右半部分是 全部nums1。i=m 表示:分隔线 在 m 的左侧,nums1 左半部分 是全部nums1,右半部分是空。left,right = 0,m【分隔线取值:[0,m] 】② i 和 j 分别将两个数组分成左右两半个部分 ,,需要让num1是比较短的数组。

2025-11-04 20:40:11 419

原创 搜索旋转排序数组

nums[mid] >= nums[left]:必须是>=:比较特殊的就是==这种情况需要划分到哪个分支(==是集合有一个或两个数,在集合有两个数的情况。两个数的时候,必须走left=left+1,才能考虑到所有情况 ,可以用nums=[3,1] target=1 举例子。,有序的左右边界组成的区间如果包含target,则一定在这个区间,缩小到这个区间继续找;思路:将数组一分为二,其中一定有一个是有序的,另一个是“小”旋转排序数组【也可能是有序】。,则返回它的下标,否则返回。按升序排列,数组中的值。

2025-10-31 15:30:00 139

原创 在排序数组中查找元素的第一个和最后一个位置

找第一个值:当nums[mid]==target时,用first记录下来当前的位置,然后right=right-1继续向前查找,查看有没有位置更靠前的。找最后一个值同理,此时nums[mid]==target时,更新left=left+1。思路:用first、last分别记录最后结果。请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。

2025-10-31 15:12:04 189

原创 N皇后问题

主对角线不冲突:row-col不重复【同一主对角线的元素满足 row1-col1==row2-col2,如(1,0)和(2,1)】次对角线不冲突:row+col不重复【同一次对角线的元素满足 row1+col1==row2+col2,如(1,2)和(2,1)】思路:①三个set( column、diagonal1、diagonal2 ),分别对应列、主对角线、次对角线 不冲突。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。如上图所示,4 皇后问题存在两个不同的解法。

2025-10-31 11:50:56 611

原创 单词搜索——规范地进行回溯

经验:不在找到后立马返回,而是通过found变量记录当前结果。目的是保证visited的正确性,因为如果直接return的话,是没有将visited变为false的(退出本分支,visited需要设置为false【回溯的要求】)单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

2025-10-31 11:34:51 254

原创 组合总和——回溯模版

给你一个 无重复元素 的整数数组 和一个目标整数 ,找出 中可以使数字和为目标数 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 对于给定的输入,保证和为 的不同组合数少于 个。示例 1:输入:candidates = [2,3,6,7], target = 7输出:[[2,2,3],[7]]解释:2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意

2025-10-23 23:25:24 277

原创 全排列——交换的思想

思路:最后存在result一定是pai.copy(),因为所有的pai即便是传参也是相当于同一个对象(就是只是地址)。比较巧妙的在于可以通过交换元素,来控制。的元素都集中在nums数组后半部分。给定一个不含重复数字的数组。

2025-10-21 22:35:59 495

原创 实现Trie(前缀树)

是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。// 返回 False。// 返回 True。// 返回 True。// 返回 True。思路:核心代码并不困难,重要的是数据结构的构思。(发音类似 "try")或者说。相当于判断某条路径是否存在。

2025-10-21 22:30:02 315

原创 课程表——拓扑排序

enter数组表示入度,只有入度为0的时候才可以学习该门课程,out字典存的以某个课程为前置的课程的所有后置课程有哪些。不断进行删边,直到删不动了为止。如果上的课程数量==numCourses,则true,否则false。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。思路:本质是判断是否为。

2025-10-20 17:24:41 424

原创 腐烂的橘子——LEGB 作用域规则

Python 查找变量时遵循LEGB 顺序只有函数、类、模块会创建新的作用域;ifforwhile不会。若要在函数中修改外层或全局变量,需显式使用nonlocal或global。

2025-10-20 17:03:21 362

原创 二叉树中的最大路径和

思路:先找root左右子树的最长路径,小于0会使路径变小,当0处理(即不走这个路径)。可以得到以当前节点为拐点的所有路径最大的那条,再和self.maxSum比较留较大值。return的是通过当前节点的最大(直的)路径,即root.val+max(left,right)被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中。最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。节点,且不一定经过根节点。是路径中各节点值的总和。给你一个二叉树的根节点。

2025-10-20 16:58:11 187

原创 二叉树的最近公共祖先

思路:dfs的返回值是一个元组(公共祖先,已经找到的节点数量),公共祖先如果还不确定就是None,已经找到的节点数量 最大就是2(即p、q都找到了)。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(左(或右)子树返回的是ALL_FOUND(也就是2),证明在左(或右)子树上就已经找到了公共祖先,继续往上返回即可。左或右有一个是PARTIAL_FOUND,但是当前节点是p或q其一,当前节点是公共祖先。

2025-10-20 16:49:59 438

原创 路径总和——回溯

思路:采用回溯的思想,dfs的sum参数是当前路径所有数的和。当遍历完左右子树后回退时,需将prefixDict字典中的这个路径的前缀和记录删除。不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。和等于 8 的路径有 3 条,如图所示。,求该二叉树里节点值之和等于。给定一个二叉树的根节点。

2025-10-20 16:25:36 310

原创 从前序与中序遍历序列构造二叉树

请构造二叉树并返回其根节点。只需注意对边界的把控。

2025-10-18 12:49:37 195

原创 二叉树展开为链表

思路:递归展开,先展开左右子树,函数返回值是子树的最后一个节点,对于当前树来说,最后一个节点是右子树的最后一个节点(如果没有右子树,就是左子树的最后一个节点)。然后进行展开操作,if lastL:是判断左子树是否是空的,如果左子树为空,是不需要进行操作的(因为已经递归过左右子树,右子树本身就是展开好的了)。左子树不空,找到左子树的最后一个节点,这个节点的右孩子指向右子树。左子树挪到右边,左子树指向空。如果左子树不空,左子树的最后一个节点的右孩子指向右子树,左子树挪到右边,左子树指向空。

2025-10-18 12:37:35 405

空空如也

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

TA关注的人

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