- 博客(25)
- 收藏
- 关注
原创 【350. 两个数组的交集 II 简单】
由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现次数的最小值。
2024-09-02 22:42:02
208
原创 【滑动窗口法解决子数组,子串问题】
在leetCode题解中看到一位大佬针对滑动窗口法解决子数组,子串问题的总结,觉得总结的非常好,成功地将滑动窗口法变成了默写题,在这里学习记录一下。
2024-08-29 21:21:06
742
原创 【49. 字母异位词分组 中等】
时间复杂度:O(nklogk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk)。空间复杂度:O(nk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要用哈希表存储全部字符串。
2024-08-22 11:31:51
421
原创 【242. 有效的字母异位词 简单】
时间复杂度 O(M+N) : 其 M , N 分别为字符串s和t长度。当 s和t无相同字符时,三轮循环的总迭代次数最多为 2M+2N ,使用 O(M+N) 线性时间。空间复杂度 O(1) : 由于字符种类是有限的(常量),一般 ASCII 码共包含 128 个字符,因此可假设使用 O(1) 大小的额外空间。
2024-08-19 23:09:23
407
原创 【面试题 02.07. 链表相交 简单】
时间复杂度 O(a+b) : 最差情况下(即 ∣a−b∣=1 , c=0 ),此时需遍历 a+b 个节点。空间复杂度 O(1) : 节点指针 A , B 使用常数大小的额外空间。首先要理解题目中求两个链表交点节点的指针。交点不是数值相等,而是指针相等。两个链表长度不一致,难点在于A和B如何同时到达两个链表中的第一个公共节点。
2024-08-18 16:53:08
757
原创 【19. 删除链表的倒数第 N 个结点 中等】
时间复杂度: O(n)空间复杂度: O(1)首先涉及到添加或删除节点,需要考虑虚拟头节点,保证真实头节点和后续节点操作一致题目要求是倒数第n个节点,难点在于单链表指向是正向的,要如何正向找到倒数第n个节点。
2024-08-17 18:08:54
434
原创 【24. 两两交换链表中的节点 中等】
时间复杂度:O(n)空间复杂度:O(1)待操作节点≥2时才进入循环进行交换,交换时遵循三个步骤。为保证头节点操作与后续节点操作一致,引入虚拟头节点。
2024-08-15 22:52:09
336
原创 【206. 反转链表 简单】
首先将cur指向head,cur->next 节点用tmp指针保存一下,因为后续要将其赋值给cur。然后利用双指针法反转cur->next 的指向了,将cur->next 指向pre。直到cur==nullptr时循环结束,完成反转。
2024-08-15 20:13:51
388
原创 【707. 设计链表 中等】
时间复杂度: 涉及 index 的相关操作为 O(index), 其余为 O(1)空间复杂度: O(n)覆盖了链表的常见操作,是练习链表操作非常好的一道题目,要注意如何利用虚头节点。
2024-08-12 23:13:23
1116
原创 【203. 移除链表元素 简单】
时间复杂度: O(n)空间复杂度: O(1)在单链表中移除头结点和移除其他节点的操作方式不一样。可以设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除了。
2024-08-09 11:54:11
380
原创 【54. 螺旋矩阵 中等】
时间复杂度:O(mn),其中 m 和 n 分别是输入矩阵的行数和列数。矩阵中的每个元素都要被访问一次。空间复杂度:O(mn)。需要创建一个大小为 m×n 的矩阵 visited 记录每个位置是否被访问过。依旧是坚持循环不变量原则。终止条件是:判断若重新定义边界后,上下或者左右边界交错,表明螺旋矩阵遍历结束,跳出循环,返回答案。
2024-07-24 22:30:41
370
原创 【59. 螺旋矩阵 II 中等】
时间复杂度 O(n^2): 模拟遍历二维矩阵的时间空间复杂度 O(1)求解本题主要是坚持循环不变量原则,填入每一行或每一列的值时坚持左闭右开或左闭右闭原则。
2024-07-24 16:25:23
663
原创 【76. 最小覆盖子串 困难】
难点在于滑动窗口法的while条件如何确定,也就是s 是否涵盖 t所有字符bool is_covered(int cnt_s[], int cnt_t[])。
2024-07-22 21:48:14
548
原创 【904. 水果成篮】
时间复杂度:O(n),其中 n 是数组 fruits 的长度。空间复杂度:O(1)。哈希表中最多会有三个键值对,可以看成使用了常数级别的空间。这个题目可以翻译为寻找包含两种元素的最大子数组,返回其长度。
2024-07-22 19:22:26
462
原创 【977. 有序数组的平方】
时间复杂度:O(n)空间复杂度:O(1)。除了存储答案的数组以外,我们只需要维护常量空间。数组其实是有序的,数组平方的最大值就在数组的两端,考虑双指针法,i指向起始位置,j指向终止位置。定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置,先将最大值塞入result最后一个,然后递减。
2024-07-08 23:21:34
437
原创 【844. 比较含退格的字符串】
时间复杂度:O(A+B+C),其中 A 和 B 分别为字符串 S 和 T 的长度,C代表处理后的字符串长度。我们需要遍历两字符串和处理后的字符串各一次。空间复杂度:O(1)。对于每个字符串,我们只需要定义一个指针和长度即可。首先要获取经过退格字符处理后的最终字符串s和字符串长度slowIndex。得到最终字符串后进行比较。
2024-07-07 22:55:51
389
原创 【26. 删除有序数组中的重复项】
时间复杂度:O(n),其中 n 是数组的长度。快指针和慢指针最多各移动 n 次。空间复杂度:O(1)。只需要使用常数的额外空间。数组中至少包含一个元素,在删除重复元素之后也至少剩下一个元素,因此 nums[0] 保持原状即可,从下标 1 开始删除重复元素。覆盖次数 + 1个首元素 = 新的nums长度。
2024-07-06 23:38:23
352
原创 【69. x 的平方根 】
时间复杂度:O(logx),即为二分查找需要的次数。空间复杂度:O(1)。比较中间元素 middle 的平方与 x 的大小关系,并通过比较的结果调整上下界的范围。
2024-07-06 21:38:00
511
原创 【34. 在排序数组中查找元素的第一个和最后一个位置】
时间复杂度: O(logn) ,其中 n 为数组的长度。二分查找的时间复杂度为 O(logn),一共会执行两次,因此总时间复杂度为 O(logn)。空间复杂度:O(1)。只需要常数空间存放若干变量。主要利用二分法查找target在数组范围中的左右边界,注意左右边界的查找条件。因为最后left == right + 1;,所以leftBorder = right;
2024-07-04 22:54:06
412
原创 【35. 搜索插入位置】
时间复杂度:O(log n)空间复杂度:O(1)采用二分法寻找target在nums中的下标,即middle,如果不在则返回left。
2024-07-01 23:12:48
938
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人