自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营Day14 | 二叉树理论 | 递归遍历 | 迭代遍历 | 统一迭代

理论基础定义:每个 node 的 degree 为 0 或 2,且 degree=0 的 nodes 都在同一层。depth=k 的树共有 2k−12^k-12k−1 个 nodes。 定义:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 前/中/后序遍历,其实指的就是中间节点的遍历顺序(中间节点出现在哪里)。 递归遍历 理论基础递归的核心:题目链接 后序遍历 - 递归 (145) 题目链接 中序遍历 - 递归 (94) 题目链接 迭代遍历 理论基础一般面试

2023-07-26 16:00:48 258

原创 代码随想录算法训练营Day13 | 239. 滑动窗口最大值 | 347. 前 K 个高频元素

在本题中,是要维持前 k 个高频元素,似乎要记录的是最大的一些值,自然会想到 max heap。有序队列,例如 priority queue (heap)可以保持值的单调,但是无法便捷地删除要 pop 的元素(不知道对应的 index)。然而,4却会被维持,因为假如4的后面全部是小于4的元素,则当窗口继续滑动,可能会出现4成为某一窗口最大值的情况。因为需要在队列的两端进行操作,pop 开头的元素的时候 list 的复杂度太高了,所以使用 deque 操作。的有序性,而不是整个窗口的有序性。

2023-07-25 01:59:47 289

原创 代码随想录算法训练营Day11 | 20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项 | 150. 逆波兰表达式求值

在结果为 negative float 的时候,是向0取整,和 // 的向下取整是不同的。符合直觉的思路,从后向前在 stack 中存入每个字符,如果存入的是前括号,则 pop 栈中的最后一个元素并检查是否是对应的后括号,不匹配则 return False。更加简洁一些的解法,从头开始遇到前括号则在 stack 中存入对应的后括号,遇到后括号则比较当前 stack 的 pop 元素是否匹配。逆波兰表达式很好的展现了计算机的计算方式,这和人类的计算思路是不一样的。注意的是,在 / 的 case 中,

2023-07-24 06:32:53 302

原创 代码随想录算法训练营Day9 | 28. 找出字符串中第一个匹配项的下标 | 459. 重复的子字符串

前缀:所有以第一个字符开头、不包含最后一个字符的连续子串。i.e.,s[:i]where0≤in0≤in后缀:所有以最后一个字符结尾、不包含第一个字符的连续子串i.e.,s[i:]where0in0 < i < n0in前缀表:记录模式串中每个从头开始的子串的最长相同前后缀的长度例如模式串 aabaaf 中的子串 aabaa,最长相同前后缀的长度是2,因为长度为3的前缀为 aab,长度为3的后缀为 baa,并不相同。而子串 a 的最长相同前后缀的长度是0(不存在前后缀)

2023-07-23 07:02:23 476

原创 代码随想录算法训练营Day10 | 232. 用栈实现队列 | 225. 用队列实现栈

实际上,一个队列即可实现顺序的逆转,只需要将 top 元素(除最后一个)弹出后再次加入即可实现逆向。队列在概念上是双向开口的(进出各一端),而栈在概念上是单向开口(进出共用一端)。FILO + LIFO = FIFO 中的朴素思想:一层栈的储存顺序对于队列来说是一次反转,那么两层栈的储存顺序对于队列来说是两次反转,负负得正即是队列的储存顺序。重点在如何实现顺序的反转:可以认为一个栈是 FILO,两个栈并用即是 FILO + LIFO = FIFO,即达成了队列的顺序。考验对于栈和队列的掌握,不涉及算法。

2023-07-23 07:01:04 278

原创 代码随想录算法训练营Day8 | 344.反转字符串 | 541.反转字符串II | 剑指Offer 05.替换空格 | 151.翻转字符串里的单词 | 剑指Offer58-II.左旋转字符串

可以不使用额外的空间(python 中 string 不可改变,但在其它语言中可以),空间复杂度为。以下解法是为了模拟 c++ 等可以修改字符串的语言的思路,python 中并不实用,但思路很好。很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。因为 python 的 string 是不可修改的,所以不能达成。利用了 python 在切片时不会报错的特性,炫酷!题目本身很容易,但是如果要求空间复杂度为。无脑解法,python 提供的切片。

2023-07-19 16:12:08 392

原创 代码随想录算法训练营Day4 | 24. 两两交换链表中的节点 | 19. 删除链表的倒数第N个节点 | 面试题 02.07. 链表相交 | 142.环形链表II

在第一个循环快慢指针相遇后,可以令慢指针从当前位置继续行走,保持快指针不动,再次相遇时即可得到环的长度。接着,从 head 开始重新定义快慢指针各一个,令慢指针先走等于环长的距离,然后两者同时出发,相遇点即为环的入口。的空间复杂度要求下,loop 的特殊之处使得起点相同、速度不同的指针能够再次相遇,并且要能发现相遇位置与 loop 入口的特殊关系。所以更偏向自己的解法,虽然变量更多,但思路更简单一些。标准的链表双指针,注意到可以通过双指针之间的差来探查所需 node,避免重复遍历(虽然复杂度没有变化)。

2023-07-19 15:32:57 325

原创 代码随想录算法训练营Day7 | 454. 四数相加II | 383. 赎金信 | 15. 三数之和 | 18. 四数之和

更重要的是,之前的题是允许 index/value重复的,但是这次题目要求不能使用重复的 index(最终结果中每个子数组中可以有相同的 value),这点对于 hash table 是致命的,因为使用哈希法进行查询的时候一般并不在乎元素的 index,所以去重会变得非常复杂,同时也失去了使用哈希法的意义。在两数之和中,要返回的是 index,而这道题中返回的是元素值。两数之和 就不能使用双指针法,因为 1.两数之和 要求返回的是索引下标, 而双指针法一定要排序,一旦排序之后原数组的索引就被改变了。

2023-07-18 13:14:59 173 1

原创 代码随想录算法训练营Day6 | 242. 有效的字母异位词 | 349. 两个数组的交集 | 202. 快乐数 | 1. 两数之和

哈希表是根据关键码的值而直接进行访问的数据结构,一般哈希表都是用来快速判断一个元素是否出现集合里(得到关键索引然后直接访问即可)。简洁:遍历数组,并且判断所需的 complement element 是否已经被找到了。超高的空间复杂度,如果不是题目限制了数值范围,数组解法很可能无法 pass。这样的 iteratable objects 中实例化,也可以从。需要查询一个元素是否出现过,或者一个元素是否在集合里的时候。,所以 hash table 需要储存的值的数量不会超过。的一个子类,主要用于统计计数。

2023-07-18 01:43:10 462 1

原创 代码随想录算法训练营Day3 | 203.移除链表元素 | 707.设计链表 | 206.反转链表

快指针探路,慢指针保存答案,但是注意在 linked list 中需要额外的变量来保存原本的 next。注意这个方法的空间复杂度更高,因为每层 recursion 都要创建一个新的中间变量。每个节点可以同时指向自己的上一个节点与下一个节点,每个节点包括了 value,prev,next。创建新链表的 recursion,同时还有超高的时间复杂度,不推荐。仅仅指本身的操作,实际中的插入/删除总是需要先通过查询来定位,所以总的复杂度还是。创建新链表,遍历进行反转,属于基础解法,但是占用了不少空间。

2023-07-17 23:58:59 238 1

原创 代码随想录算法训练营 总结(持续更新)

题目同时需要 index 和 value,这意味着哈希无法发挥全部优势,因为哈希只能关注两者中的一种(准确来说是检查 index 是否存在)。所以哈希的去重会变的非常复杂。但是注意,哈希的优势在于查找元素(或者说查找索引),但并不关心元素的位置。题目只关注元素的值,而不在意 index(索引),所以哈希是最优解,可以通过遍历的指针压缩到。所以使用双指针,对输入排序(彻底告别哈希),固定多个遍历的指针,直到剩余两个进行头尾的双指针。有序数组的平方就是一道简单的二分查找的变形,要能迅速意识到并且使用二分查找。

2023-07-14 05:22:34 897 1

原创 代码随想录算法训练营Day2 | 977. 有序数组的平方 | 209. 长度最小的子数组 | 59. 螺旋矩阵II

问题在于写的丑陋,同时还需要最后的收尾(可以优化 while 的 termination condition?这道题没有复杂的算法思路,本质是能分清楚循环中每个 case 的边界条件,考验思路是否清晰 + 能否实现。注意由于出现在两端的都是(平方)最大值,所以输出的数组应该从后往前更新。可以成为一个合格的解法。处理滑动区间的基础方法,解题时需明确。滑动区间(特殊版本的双指针)利用了。的矩阵,然后手动加上最外面的一圈。题目的特点在于“有序”,所以。,会有 copy 的问题。只会右移的特点,只遍历。

2023-07-14 05:22:10 326 1

原创 代码随想录算法训练营Day1 | 704. 二分查找 | 27. 移除元素

题目链接解题思路。

2023-07-14 05:20:56 384 2

空空如也

空空如也

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

TA关注的人

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