- 博客(23)
- 收藏
- 关注
原创 NeetCode刷题第22天(2025.2.5)
给定一个整数矩阵 m x n ,返回矩阵中所有元素按螺旋顺序的列表。每当我们遍历完一圈,L向右加1,R向左减1,T向下加1,B向上减1。时间复杂度:Om∗n空间复杂度:O1。
2025-02-06 16:54:15
955
原创 NeetCode刷题第21天(2025.2.4)
例如,如果三元组[i] = [1, 3, 1] 且三元组[j] = [2, 1, 2],则三元组[j]将更新为 [max(1, 2), max(3, 1), max(1, 2)] = [2, 3, 2]。例如, [1, 2] 和 [3, 4] 是非重叠的,但 [1, 2] 和 [2, 3] 是重叠的。例如, [1, 3] 和 [2, 4] 是重叠的,但 [1, 2] 和 [2, 3] 是非重叠的。例如,[1,2] 和 [3,4] 是非重叠的,但 [1,2] 和 [2,3] 是重叠的。所以count+1。
2025-02-05 20:33:14
852
原创 NeetCode刷题第20天(2025.2.1)
最后一个1表示,当我们使用硬币5时,有几种组合使得和为0,显然是0,当用0和硬币。在这个位置中,当我们加入一个硬币2时,所需的值就是1-2=-1,显然超出范围不合理。同时,我们可以知道,如果到了2,那么就不可能成功,所以这里设置dp[2] = False。如果 nums=[1,1],则有两种不同的方法可以将输入的数字相加得到 0 的总和:“+1-1” 和 “-1+1”。如果前面的数或者前面子数组相加的和为负数,那他们就起了反向的作用,我们需要重新计数最大和。返回总计达到 amount 的非重复组合的数量。
2025-02-03 21:26:24
1002
原创 NeetCode刷题第19天(2025.1.31)
首先最后一个5和默认0开始,往前面一个位置遍历,0+11=11,5+11=16,添加到set中,此时set={0,5,11,16}。给定两个整数 m 和 n,返回从网格左上角 (grid[0][0]) 到右下角 (grid[m - 1][n - 1]) 可以采用的可能的唯一路径的数量。当i=7的时候,sub_s=“e”,长度为1,而wordDict中的长度都大于他,显然不可能匹配到,所以dp[7]=False。在LIS[0]的时候,因为后面的都比1大,所以要把该位置和后面都进行相加,然后选择最大的。
2025-02-01 16:35:33
835
原创 NeetCode刷题第17天(2025.1.27)
这里0节点和1节点之间存在边,0位置的rank首先会+1。1和2之间又存在边,实际上2就是0的子孙,因此0位置的rank会再+1。首先使用深度优先遍历,并把每次遍历到的节点放入visited中,遍历完后如果visited的个数等于总的节点个数,那么说明他们都是联通的。还有一个edges阵列,其中edges[i] = [a, b]表示图表中的节点a和节点b之间存在边缘。给定从 0 到 n - 1 标记的 n 节点和无向边列表(每条边是一对节点),编写一个函数来检查这些边是否组成一棵有效的树。
2025-01-28 14:57:22
883
原创 NeetCode刷题第18天(2025.1.30)
这里我们有par和rank两个列表,一个是用来记录根节点,一个用来标记等级的,没添加一个节点,跟节点等级+1,把小的rank加到大的rank上。当我们把前面两条边相连的时候,可以看到par列表都是1了,说明他们都是共同的根节点了,此时他们已经是连通的了。该图表示为长度 n 的数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 在图中。边缘具有从 1 到 n 的两个不同的顶点,并且不是图中以前存在的边缘。返回可以删除的边缘,以使该图仍然是连接的非周期图。
2025-01-28 14:56:20
321
原创 NeetCode刷题第13天
从上面这个图中,我们的思想是这样的。对于一个给定的数组,我们从第一个数字开始遍历,依次与最后一个数字比较。遍历完成后我们把p位置上的值和最后的值进行交换。这样做可以保证p位置之前的值都是小于p位置上的值,而之后的值都是大于等于该位置的值的。给定一个二维数组points ,其中points[i] = [xi, yi]表示 XY 轴平面上的点的坐标。给定一个由整数nums和整数k组成的未排序数组,返回数组中kth最大的元素。kth最大元素是指排序顺序中kth最大元素,而不是kth不同元素。
2025-01-27 16:58:04
1058
原创 NeetCode刷题第16天(2025.1.24)
这里我们从一个门出发,它的四周(上下左右)到它的距离则为1,在1 的四周到它的位置则为2,以此类推我们可以得到到该门距离为3、4等的地方。但其实有些地方的值并不是最小的,因为图中还有其他的门。然后当队列中不存在元素的时候看此时还有多少新鲜的橘子,如果大于1,就需要返回-1。将其作为 2D 列表返回,其中每个元素都是表示单元格的行和列的列表 [r, c]。为简单起见,节点值从 1 到n进行编号,其中n是图中的节点总数。如果一个连续的、四向连接的 ‘O’ 组被 ‘X’ 包围,则认为它被包围。
2025-01-25 13:30:28
635
原创 NeetCode刷题第15天(2025.1.22)
在上面第2层第1个左子树的时候,它其实已经包含了任何知识至少有一个1和一个2在内的任何子集。所以在其对应的右子树上(图中绿色圆圈圈出的),该右子树的孩子节点不仅需要跳过当下的2值,还应该跳过后面相同的所有2值,跳到3的位置。所以在其对应的右子树上(图中绿色圆圈圈出的),该右子树的孩子节点不仅需要跳过当下的2值,还应该跳过后面相同的所有2值,跳到3的位置。n 是字符串的长度, t 是 Trie 中创建的 TreeNode 的总数。n是字符串的长度, t 是 Trie 中创建的 TreeNode 的总数。
2025-01-23 14:41:44
766
原创 NeetCode刷题第14天(2025.1.21)
给定一个 CPU 任务tasks数组,其中tasks[i]是从A到Z大写英文字符。您还将获得一个整数n。每个CPU周期允许完成单个任务,并且任务可以按任何顺序完成。唯一的限制是相同的任务必须至少间隔n CPU 周期,以冷却 CPU。返回完成所有任务所需的最小 CPU 周期数。这里我们用最大堆,因为python只有最小堆,所以我们对他们取反。
2025-01-21 11:33:40
593
原创 NeetCode刷题第12天(2024.1.1)
这里需要注意的是,不能单独把每个节点只和他们的左右子树相比。因为如上图所示,4这个节点是小于父节点7的,但是再往上一级就是5,并没有大于5是不对的。所以我们在检查每个节点的时候,需要设立两个边界条件。这里需要注意的是,不能单独把每个节点只和他们的左右子树相比。因为如上图所示,4这个节点是小于父节点7的,但是再往上一级就是5,并没有大于5是不对的。所以我们在检查每个节点的时候,需要设立两个边界条件。给定二叉树的root ,如果它是有效的二叉搜索树,则返回true ,否则返回false。
2025-01-01 21:22:40
833
原创 NeetCode刷题第11天(2024.12.31)
给定一个二叉搜索树 (BST),其中所有节点值都是唯一的,并且树中的两个节点 p 和 q ,返回两个节点的最低公共祖先 (LCA)。两个节点 p 和 q 之间的最低公共祖先是树 T 中的最低节点,使得 p 和 q 作为后代。给定一个二叉树 root ,将其级别顺序遍历作为嵌套列表返回,其中每个子列表包含树中从左到右特定级别的节点的值。在二叉树中,如果从树根到节点 x 的路径中没有值大于节点 x 的节点,则认为节点 x 是好的。因为这是一个二叉搜索树,所以每个节点左子树的值小于根节点,右子树的值大于根节点。
2024-12-31 19:24:59
759
原创 NeetCode刷题第十天(2024.12.29)
注意:对于所有对set的调用,时间戳均严格按递增顺序排列。二分查找我们这里的键值对中,这里的值也是一个列表,每个列表中面有val和time这两个元素时间复杂度:O1的set()和O(logn)的get()Om∗nn 是与键关联的值的总数, m 是键的总数。
2024-12-31 14:26:24
842
原创 NeetCode刷题第九天(2024.12.22)
这里我们通过计算每辆汽车到达目的地需要多少时间,但是根据题目,如上图所示,蓝色汽车最开始以速度2行驶,当它追上绿色车的时候就以速度1行驶了,所以这里我们从距离目的地最近的那辆车开始遍历计算,以相反的顺序迭代这个道路上的车辆。一辆车不能超过它前面的另一辆车。它只能追上另一辆车,然后以与前面的车相同的速度行驶。车队是一组非空的以相同位置和相同速度行驶的汽车。如果一辆汽车在车队到达目的地时追上车队,则该汽车被视为车队的一部分。,这就是对行和列都使用二分查找的方法,双重二分查找。返回将到达目的地的不同车队的数量。
2024-12-22 19:25:44
865
原创 NeetCode刷题第七天(2024.12.12)
我们可以定义两个堆栈,其中一个堆栈用来存放每次添加的元素,另一个堆栈用来记录数值记录堆栈中对应位置的最小值。您将获得一个字符串tokens数组,它表示逆波兰表示法中的有效算术表达式。设计一个支持push 、 pop 、 top和getMin操作的堆栈类。我们设置一个堆栈,如果碰到运算符,每次就从堆栈中弹出两个数进行运算。每个函数应该运行在O(1) 时间。返回表示表达式求值的整数。
2024-12-13 10:49:19
442
原创 NeetCode刷题第六天(2024.12.11 )
只要我们每次子字符串的长度减去频率最大的字符个数的值小于k,那就说明这个子字符串是成立的。设置一个集合,遍历字符串,但遍历到的字符不在集合中的时候,就往集合中添加这个元素,如果在集合中,就移除集合中该字符及左侧的部分。这意味着如果s1的排列作为s2的子字符串存在,则返回true。执行最多k次替换后,返回仅包含一个不同字符的最长子字符串的长度。给定一个字符串s ,找到没有重复字符的最长子字符串的长度。n 是字符串的长度, m 是字符串中唯一字符的总数。n 是字符串的长度, m 是字符串中唯一字符的总数。
2024-12-12 11:50:21
826
原创 NeetCode刷题第五天(2024.12.08 )
给定一个字符串数组strs ,将所有字谜词分组到子列表中。您可以按任何顺序返回输出。字谜词是一个字符串,其中包含与另一个字符串完全相同的字符,但字符的顺序可以不同。哈希表遍历每个字符串,并用哈希表存储字符串中每个字母出现的次数时间复杂度:Om∗n,m是给定的单词数量,n是每个字符串的平均长度Om。
2024-12-08 21:49:02
771
原创 NeetCode刷题第四天(2024.12.07 )
当我们到8的时候,dp中n减的是8,这里n减的数4、8这种,我们在这里称之为偏移量([1, 2, 4, 8, …给定一个数组nums其中包含[ 0 , n ]范围内的n整数且没有任何重复项,请返回nums范围内缺少的单个数字。从上图可以看到,4-7的二进制表示中,导数第三位都是1,而后面 的则和0-3是一模一样的。给定一个整数n ,计算[ 0 , n ]范围内每个数字的二进制表示形式中1的数量。思想很简单,就是用0到n累加的和,减去列表的累加和,得到的差值就是列表中缺少的元素。
2024-12-07 22:43:47
269
原创 NeetCode刷题第三天(2024.12.06)
给定一个整数stones数组,其中stones[i]表示ith石头的重量。我们想对石头进行如下模拟:在每一步中,我们选择两块最重的石头,重量为x和y ,并将它们 粉碎在一起。如果x == y ,两块石头都会被摧毁。如果x < y ,则重量x的石头被破坏,并且重量y的石头具有新的重量y - x。继续模拟,直到剩下的石头不超过一颗。返回最后剩余的石头的重量,如果没有剩余则返回0Output: 1大顶堆# 如果最后两个石头一起粉碎了,需要返回0时间复杂度:Onlogn。
2024-12-06 21:40:41
590
原创 NeetCode刷题第二天(2024.12.05)
给定链表head的开头,如果链表中存在循环,则返回true。否则,返回false。如果链表中至少有一个节点可以通过下next指针再次访问,则链表中存在循环。在内部, index确定循环开始的索引(如果存在)。列表的尾节点将其next指针设置为指向index-th节点。如果index = -1 ,则尾节点指向null ,不存在循环。双指针时间复杂度:OnO1哈希集时间复杂度:OnOn。
2024-12-05 12:59:52
593
原创 NeetCode刷题第一天(2024.12.04)
给定一个整数数组nums ,如果任何值在数组中出现多次,则返回true ,否则返回false。暴力法时间复杂度:On2O1排序时间复杂度:OnlognO1或者On取决于排序算法哈希集时间复杂度:OnOn哈希集长度时间复杂度:OnOn。
2024-12-05 11:57:03
654
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人