刷题日记
文章平均质量分 73
刷题日记
小米睡不醒.
热爱学习编程,以及编程知识的分享!
展开
-
牛客热题:矩阵最长递增路径
dfs的时间复杂度为O(m * n), 主函数调用了m * n次,所以总体的时间复杂度是O( 对于每个(x, y)来说,遍历它上下左右四个坐标,查看是否越界或者满足递增的要求;创建了一个和原矩阵空间大小相同的矩阵用于判断当前的左边是否被递归过,以及一些变量。创建了一个和原矩阵同等空间的dp数组,则空间复杂度为O(n * m) 所以总体上来说空间复杂度:O(n * m); 相当于遍历一遍对应的矩阵O(n * m) 若是满足要求就继续递归满足要求的点。: 两重循环遍历矩阵中所有的点。原创 2024-06-05 14:26:00 · 728 阅读 · 0 评论 -
牛客热题:字符串的全排列
时间复杂度: O(n!空间复杂度: O(n⋅n!原创 2024-06-04 19:33:17 · 867 阅读 · 0 评论 -
牛客热题:岛屿数量
岛屿数量_牛客题霸_牛客网 (nowcoder.com)原创 2024-06-04 18:22:34 · 571 阅读 · 0 评论 -
牛客热题:没有重复数字的全排列
因为结果存储占用的空间是主要部分。生成排列的总时间复杂度为。综合考虑,空间复杂度为。原创 2024-06-03 12:20:02 · 504 阅读 · 0 评论 -
牛客热题:缺失的第一个正整数
这段代码是用来找出一个数组中只出现一次的两个数字的。它的思路是利用异或操作找出数组中所有数字的异或结果,异或结果中为1的最低位,根据这个最低位将数组分为两组,分别进行异或操作,得到的结果就是这两个只出现一次的数字。除了存放结果的数组res外,只使用了几个常量级别的变量,所以空间复杂度为O(1)。step2:遍历哈希表,然后将其中只出现一次的插入到答案数组中即可。空间复杂度:O(N) , 利用了额外的空间,哈希表。时间复杂度:O(N) , 相当于遍历了两次数组。原创 2024-06-02 19:59:06 · 761 阅读 · 0 评论 -
牛客热题:数组中出现一次的两个数字
这段代码是用来找出一个数组中只出现一次的两个数字的。它的思路是利用异或操作找出数组中所有数字的异或结果,异或结果中为1的最低位,根据这个最低位将数组分为两组,分别进行异或操作,得到的结果就是这两个只出现一次的数字。除了存放结果的数组res外,只使用了几个常量级别的变量,所以空间复杂度为O(1)。step2:遍历哈希表,然后将其中只出现一次的插入到答案数组中即可。空间复杂度:O(N) , 利用了额外的空间,哈希表。时间复杂度:O(N) , 相当于遍历了两次数组。原创 2024-06-02 18:05:03 · 385 阅读 · 0 评论 -
牛客热题:数据流中的中位数
,因为每次插入都需要在前面的元素中遍历找到对应的位置,所以每个元素的插入的时间复杂度是O(N),因此时间复杂度为O(中位数是指:有序数组中中间的那个数。, 说明,中位数是左边数据结构的最大值与右边数据结构的最小值的平均值。median-1]的数据,并且可以。返回最大值的,其实就是大根堆。然后,我们把[median]即中位数,随便放到哪个都可以。, 说明,中位数是左边数据结构的最大值。, 说明,中位数是右边数据结构的最小值。相对应的,如果我有个数据结构可以保留。返回最小值的,其实就是小根堆,原创 2024-05-29 20:36:25 · 796 阅读 · 0 评论 -
牛客热题:最小的k个数
step2:堆顶的元素大于当前遍历的元素,那么就将堆顶pop,然后将当前元素入堆。), 插入容量为k的大根堆时间复杂度为O(longk), 一共遍历n个元素。step1:堆中不够k个元素就向堆中插入数据。空间复杂度:O(K), 容量为K的优先队列。空间复杂度:O(N), 答案数组的长度。最后将堆中的元素全部放入到答案数组。) , sort的时间复杂度。堆顶的元素为堆中最大的元素。原创 2024-05-27 12:33:13 · 838 阅读 · 0 评论 -
牛客热题:寻找第K大
时间复杂度: O(nlognnlog nnlogn空间复杂度: O(nnn这是因为sort函数在最坏情况下需要线性的额外空间,同时进行排序的平均时间复杂度为 O(nlognn log nnlogn。原创 2024-05-27 12:31:57 · 816 阅读 · 0 评论 -
牛客热题:滑动窗口的最大值
空间复杂度:O(N),其中开辟了N - size大小的答案数组,和最大为size长度的双端队列。空间复杂度:O(N), 使用了一个N - size长度的数组用来返回答案。时间复杂度:O(N * M) ,其中N是数组的长度,M为size的大小。时间复杂度:O(N), 遍历了一遍数组,求出了所有滑动窗口的最大值。原创 2024-05-26 15:22:37 · 407 阅读 · 0 评论 -
牛客热题:有效括号
时间复杂度:O(1), 所有的请求均以O(1)的方式实现。 判断当前的值和s2的栈顶的数据比较,维护一个单调栈,用于实现常数级的min查询。空间复杂度:O(N), 使用了两个栈空间。 如果该值小就将其同时入栈给两个栈。,而第二个栈将自己的栈顶数据重入一遍。 否则,只入栈给第一个栈。 两个栈同时出栈即可。思路来自牛客大佬题解。原创 2024-05-26 14:07:23 · 155 阅读 · 0 评论 -
牛客热题:包含min函数的栈
时间复杂度:O(1), 所有的请求均以O(1)的方式实现。 判断当前的值和s2的栈顶的数据比较,维护一个单调栈,用于实现常数级的min查询。空间复杂度:O(N), 使用了两个栈空间。 如果该值小就将其同时入栈给两个栈。,而第二个栈将自己的栈顶数据重入一遍。 否则,只入栈给第一个栈。 两个栈同时出栈即可。思路来自牛客大佬题解。原创 2024-05-20 13:53:18 · 703 阅读 · 0 评论 -
牛客热题:用两个栈实现队列
时间复杂度:O(N) , 每次push的时间复杂度是O(1), 但是pop的时候,因为存在需要将其中的栈的数据搬运到另一个栈所以需要O(N)的复杂度,其中N是对应的搬运的数据的个数。空间复杂度:O(1), 除了题目给出的栈以外,只使用了常数个额外的变量空间。原创 2024-05-20 13:16:49 · 263 阅读 · 0 评论 -
牛客热题:二叉搜索树的最近公共祖先
空间复杂度:主要取决于递归调用的深度,即函数调用栈的使用情况。在最坏情况下,如果二叉搜索树是一个不平衡的树,递归调用可能达到树的高度。因此,空间复杂度为 O(h),其中 h 是树的高度。时间复杂度:这段代码的时间复杂度取决于树的高度,即 O(h),其中 h 是树的高度。原创 2024-05-19 13:51:03 · 302 阅读 · 0 评论 -
牛客热题:在二叉树中找到两个最近公共祖先
这段代码主要是用来判断一棵二叉树是否是平衡二叉树的。空间复杂度: O(n),因为需要递归调用的栈空间。时间复杂度:O(n)原创 2024-05-19 13:50:14 · 337 阅读 · 0 评论 -
牛客热题:判断是否是平衡二叉树
这段代码主要是用来判断一棵二叉树是否是平衡二叉树的。空间复杂度: O(n),因为需要递归调用的栈空间。时间复杂度:O(n)原创 2024-05-18 12:16:49 · 619 阅读 · 0 评论 -
牛客热题:判断二叉树是不是搜索二叉树
空间复杂度:O(M),申请了一个队列空间,该队列的最大空间为二叉树的最后一层的节点数。时间复杂度:O(N), 遍历了一遍二叉树。原创 2024-05-17 12:03:01 · 433 阅读 · 0 评论 -
牛客热题:判断是否是完全二叉树
空间复杂度:O(M),申请了一个队列空间,该队列的最大空间为二叉树的最后一层的节点数。时间复杂度:O(N), 遍历了一遍二叉树。原创 2024-05-17 12:01:53 · 375 阅读 · 1 评论 -
牛客热题:镜像二叉树
空间复杂度:O(N),没有额外开变量,但是递归调用的函数栈帧的个数和二叉树的节点数相同。时间复杂度:O(N) , 遍历一遍二叉树。原创 2024-05-16 13:22:50 · 395 阅读 · 0 评论 -
牛客热题:合并二叉树
空间复杂度:O(N)。没有申请新的空间,但是递归调用栈占用了N的空间。时间复杂度:O(N),等于中序遍历的时间复杂度。原创 2024-05-16 13:06:06 · 288 阅读 · 0 评论 -
牛客热题:二叉树与双向链表
空间复杂度:O(N)。没有申请新的空间,但是递归调用栈占用了N的空间。时间复杂度:O(N),等于中序遍历的时间复杂度。原创 2024-05-15 12:15:32 · 705 阅读 · 0 评论 -
牛客热题:二叉树的最大深度
这样通过递归的方式,从根节点开始逐层向下计算深度,直到叶子节点为止,最终得到整棵树的最大深度。对于空间复杂度,在最坏情况下,递归调用会将所有节点压入调用栈,导致空间复杂度为 O(N)。这段代码使用了广度优先搜索(BFS)的思路来计算二叉树的最大深度。综上所述,这段代码的时间复杂度为 O(N),空间复杂度为 O(W)。时间复杂度:O(N)空间复杂度:O(W)原创 2024-05-15 11:12:09 · 583 阅读 · 0 评论 -
牛客热题:二叉树的后序遍历
空间复杂度:O(N), 创建了一个和二叉树节点数相等的数组,用来返回对应的答案。空间复杂度:O(N), 使用了额外的栈空间。时间复杂度:O(N) ,遍历了一遍二叉树。时间复杂度:O(N),遍历了一遍二叉树。原创 2024-05-14 14:40:24 · 292 阅读 · 0 评论 -
牛客热题:二叉树的中序遍历
空间复杂度:O(N) , 使用了一个和二叉树节点数相同的数组。时间复杂度:O(N) ,遍历了一遍对应的二叉树。空间复杂度:O(N), 答案数组和对应栈空间。时间复杂度:O(N) ,遍历了一遍二叉树。原创 2024-05-14 14:00:29 · 473 阅读 · 0 评论 -
牛客热题:二叉树的前序遍历
空间复杂度:O(N),使用了和二叉树的节点数相同的答案数组和对应的栈空间。空间复杂度:O(N) , 使用了一个和二叉树节点数相同的数组。时间复杂度:O(N) ,遍历了一遍二叉树。时间复杂度:O(N),遍历了一遍二叉树。原创 2024-05-14 13:36:50 · 322 阅读 · 0 评论 -
牛客热题:旋转数组的最小数字
,大部分情况维持二分的时间复杂度,但是当全相等的时候,就变成了O(N)空间复杂度:O(1),使用了常数个额外的变量。原创 2024-05-13 16:59:11 · 384 阅读 · 0 评论 -
牛客热题:比较版本号
时间复杂度:O(N) ,只遍历了一次对应字符串。空间复杂度:O(1),使用了常数个变量。原创 2024-05-13 16:52:55 · 393 阅读 · 0 评论 -
牛客热题:逆序对数量
归并排序内部又是将原数组分成很多个小区间,然后相邻的小区间再进行合并。逆序对:数组左边边的元素大于右边的元素则被称为一个逆序对。首先归并排序的思路就是将两个原本有序的数组合并为一个数组。空间复杂度:O(N), 借用了和原数组长度相同的辅助数组。那么在合并的途中,就涉及到那些元素的位置需要交换。(其中i,j是两个待合并数组的下标)),采用了归并排序的思路。原创 2024-05-10 09:30:17 · 226 阅读 · 0 评论 -
牛客热题:寻找峰值
2.反之是下降的趋势,那么说明答案一定在左侧,所以我们舍弃右半部分区间。②计算mid,并且查看mid的值和他右边的值->用来判断mid的趋势。:增长的趋势,那么说明答案一定在右侧,所以我们舍弃左半部分区间。空间复杂度:O(1), 使用了常数个变量。空间复杂度:O(1), 使用了常数个变量。时间复杂度:O(N), 遍历了一遍数组。①首先将l,r位于数组的首尾。原创 2024-05-10 09:29:37 · 662 阅读 · 0 评论 -
牛客热题:二分查找
首先l, r分别指向数组的两端。空间复杂度:O(1), 使用了常数个额外的变量。计算l,r的中点mid,查看。),每次将搜索范围除以2。和target的关系。原创 2024-05-10 09:28:47 · 260 阅读 · 0 评论 -
牛客热题:删除链表中的重复元素-II
相等:则ne向后遍历,寻找不等于cur的节点,或者直到链表尾部。时间复杂度:O(N), 遍历了一遍链表,和一遍数组。分别表示前一个节点,当前节点,和下一个不重复的节点。空间复杂度:O(1), 使用了常数个变量。不相等:这三个指针都向后移动一个节点。时间复杂度:O(N), 遍历了一次链表。空间复杂度:O(N), 使用了哈希表。维护三个指针pre,cur,ne。原创 2024-05-09 09:08:05 · 611 阅读 · 0 评论 -
牛客热题:删除链表中的重复元素-I
空间复杂度:O(1), 使用了常熟个变量。时间复杂度:O(N),遍历了一遍链表。原创 2024-05-09 09:06:16 · 420 阅读 · 0 评论 -
牛客热题:链表的奇偶重排
空间复杂度:O(N), 借用了两个额外的数组空间,总长度为链表的长度。时间复杂度:O(N), 遍历两次链表,一次取数字,一次放数字。空间复杂度:O(1), 使用了常数个额外的变量。时间复杂度:O(N),只遍历了一次链表。原创 2024-05-08 08:55:54 · 273 阅读 · 0 评论 -
牛客热题:单链表排序
空间复杂度:O(1),借用了常数个额外的空间。),用了c++原生的sort,底层是快排。O(N),借用了额外的数组空间。),利用归并排序的思路实现。原创 2024-05-06 22:03:29 · 902 阅读 · 1 评论 -
牛客热题:链表相加(二)
空间复杂度:O(M + N), 创建了一个max(m, n) + 1的链表。时间复杂度:O(N), 反转是O(N), 相当于遍历了两次链表。原创 2024-05-06 09:53:03 · 229 阅读 · 0 评论 -
牛客热题:两个链表的第一个公共节点
让N1和N2一起遍历,当N1先走完链表1的尽头(为null)的时候,则从链表2的头节点继续遍历,同样,如果N2先走完了链表2的尽头,则从链表1的头节点继续遍历,也就是说,N1和N2都会遍历链表1和链表2。使用两个指针N1,N2,一个从链表1的头节点开始遍历,我们记为N1,一个从链表2的头节点开始遍历,我们记为N2。因为两个指针,同样的速度,走完同样长度(链表1+链表2),不管两条链表有无相同节点,都能够到达同时到达终点。(N1最后肯定能到达链表2的终点,N2肯定能到达链表1的终点)。原创 2024-05-04 12:55:28 · 286 阅读 · 1 评论 -
牛客热题:链表中的倒数最后K个节点
链表中倒数最后k个结点_牛客题霸_牛客网 (nowcoder.com)原创 2024-05-03 18:25:19 · 416 阅读 · 0 评论 -
牛客热题:链表中环的入口结点
通过定义slow和fast指针,slow每走一步,fast走两步,若是有环,则一定会在环的某个结点处相遇(slow == fast),根据下图分析计算,可知从。原创 2024-05-02 15:47:56 · 289 阅读 · 0 评论 -
牛客热题:判断链表是否有环
O(N),其中N为链表的长度,原因是当第一次相遇的时候慢指针的移动距离不会超过链表的长度。:O(N),其中N为链表的长度,遍历最多为链表的长度就可以判定是否有环。:O(N),最多使用链表长度的空间。:O(1),只建立了两个指针。原创 2024-04-30 22:56:26 · 92 阅读 · 0 评论 -
牛客热题:合并K个升序链表
个数字中的最小值,我们可以借助堆,也就是优先队列—>priority_queue来完成这一点。如果非要按照归并排序的合并思路,双指针不够用,我们可以直接准备。每个链表最多被遍历k - 1次,我们放缩为k次,那么需要最多。由于所有的链表的长度加起来为。, 使用了常数个额外的空间。但其实一般达不到O(个指针,每次比较得出。原创 2024-04-30 22:20:05 · 472 阅读 · 0 评论