算法
白鹭float.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法速刷(11/100)】LeetCode —— 101. 对称二叉树
如果使用递归思想,这道题则十分的好写。本题最重要的是如何同时比较两个镜像位置上的节点,并继续向下比较其镜像位置上的子节点,基于这点,我们至少知道递归的函数需要一左一右两个指针。并且比较当前镜像节点是否相同后继续向下递归,否则返回结果。来进行递归的查询二叉树镜像位置上的节点。原创 2024-11-20 23:21:32 · 347 阅读 · 0 评论 -
【算法速刷(10/100)】LeetCode —— 23. 合并 K 个升序链表
按照最朴素的方法,每轮都对所给列表进行一次遍历,O(n)的复杂度获得值最小的节点,并将其上的链表指针后移一位,一旦为空则剔除数组。数组为空时结束循环。这样写时间复杂度较高,因为涉及到枚举最小值节点,数组的删除操作,但空间复杂度可以降到O(1)原创 2024-11-16 21:38:05 · 330 阅读 · 0 评论 -
【算法速刷(9/100)】LeetCode —— 42.接雨水
后来发现有点复杂化了,因为题目只需要累计的结果数字,不需要额外的东西,但因为先入为主的观念,我还是选择了从低到高从左到右依次遍历的模拟法,这种方法的复杂度基本上是O(N * MaxHeight),实际也是十分低效,但私以为思路也是值得一分享,最后用例通过319/323。注意构造的数组的值,不应低于当前位置的高度,假设左边高度始终低于当前高度,则在数组中记录为当前位置的高度,这样可以保证构造的数组减去原数组中当前位置高度不会出现负值。需要注意的是,在出栈的操作中,需要三个高度。这个算式的值域 >= 0。原创 2024-11-11 18:33:09 · 671 阅读 · 0 评论 -
【算法】C++KMP算法的简洁实现
对于朴素的字符串匹配算法,如果想在主串中寻找到第一次出现子串的位置,需要依次枚举主串中的每一个位置作为起始位置进行匹配尝试,如果主串中存在许多与子串相似结构的部分,那么朴素算法会进行大量的无用枚举,时间复杂度非常之高。KMP算法区别于朴素算法的地方就是其在尝试匹配时,匹配失败后不会回溯主串的指针,而是通过一个预处理的next数组去回溯子串的指针,主串的指针会继续向后遍历。因此KMP算法只会遍历一次主串,这在主串长,子串短的情况下具有非常大的性能优势。原创 2024-09-25 23:20:17 · 530 阅读 · 0 评论 -
【算法速刷(8/100)】LeetCode —— 21.合并两个有序链表
使用两个指针顺序遍历两个链表,每次都将最小值的那个加到结果链表上,最后如果两个链表不一样长,就将剩下的接到结果后面。无头结点的情况下,处处都需要进行判空,将初次赋值和其他时候分为两个情况,会比较长。有头结点的时候,无需判断首次赋值,可以节省许多的代码行数和判断。原创 2024-08-14 21:39:28 · 349 阅读 · 0 评论 -
【算法速刷(7/100)】LeetCode —— 200.岛屿数量
这题是典型的深搜题,只需要额外记录每个格子是否被搜索过,然后挨个进行陆地的深度搜索即可。(如果要使用lambda进行递归,需要显式指出变量的模板类型,不能使用auto推导)原创 2024-08-14 19:43:48 · 342 阅读 · 0 评论 -
【算法速刷(6/100)】LeetCode —— 199.二叉树的右视图
该题实际上等于求每一层中的最右边的节点,可以使用队列结合二叉树的层次遍历实现。原创 2024-08-11 12:15:09 · 286 阅读 · 0 评论 -
【算法速刷(5/100)】LeetCode —— 20.有效的括号
不匹配直接返回false。是右括号:检查是否匹配栈顶括号。栈不为空:还有剩余括号,返回false。题目要求比较明晰简洁,编码难度并不算高。栈不为空:进行条件判断。栈为空:无脑允许进栈。栈为空:返回true。使用栈可以快速解答本题。原创 2024-08-06 01:15:14 · 296 阅读 · 0 评论 -
【算法速刷(4/100)】LeetCode —— 155.最小栈
最小栈问题,有许多种办法进行解答,首先需要锁定的条件是要求在实现栈功能之外,要在常数时间内检索最小元素。这样可以避免最小栈始终记录每一层的最小元素,即使新增元素后最小值还是不变,可以节省一定的存储空间。维护一个最小栈,该栈仅在栈为空,或者新入栈元素不大于最小栈的栈顶元素时才会入栈。同理,该栈仅在栈不为空,且出栈元素等于最小栈的栈顶元素时才会出栈。以上操作都要求有O(n)的额外空间来记录栈对应层的最小值状态。一般这种O(1)查找最值都可以用一下方法。在这里说一下最小栈的方式。每天写几题,健康每一天。原创 2024-08-06 01:02:06 · 375 阅读 · 0 评论 -
【算法速刷(3/100)】LeetCode —— 54.螺旋矩阵
关于这一类矩阵题都可以通过模拟的方法进行解答,只是代码复杂的高低不同首先是与Leetcode官方的题解一样的方法。原创 2024-07-31 18:07:26 · 786 阅读 · 0 评论 -
【算法速刷(2/100)】LeetCode —— 49.字母异位词分组
因此,第一个操作要求我们寻找一个标识一组异位词的方法,由于题目所给数据均为独立单词,因此最好的方法是直接对字符串进行排序,一组异位词排序后得到的是相同的字符串。对于第二个操作,为了将相同异位词放入同一个集合,可以创建一个以排序后的字符串作为键的哈希表,而该哈希表的值可以是数组,也可以是下标。在该题目中,算法分为两大操作,第一个操作是确定其是哪个词的异位词,第二个操作是将其放入对应的异位词集合。如果是下标,则可以在操作哈希表时即构造结果数组。以下是使用排序字符串和下标作为键值对的哈希表的实现方法。原创 2024-07-31 03:13:24 · 329 阅读 · 0 评论 -
【算法速刷(1/100)】LeetCode —— 160.相交链表
今天开始我要速通TOP100!—— 沃兹基 · 硕德。原创 2024-07-29 15:11:32 · 446 阅读 · 0 评论
分享