
LeetCode
文章平均质量分 91
良木林
喵
展开
-
240427 leetcode exercises
但是题目只想让我们找到那个特定的数字,并没有要求我们进行排序。这样我们既完成了“计数排序”的准备工作,还知道了数据中的最大元素,后续无需每次都从下标 20000 向前搜。题目要求返回第k个最大的数字,就是数组排序后的倒数第k个数字。从最大值对应的桶开始向小的方向(桶下标依次减 1)走,用一个变量。,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。,通过某种方式记录下来之后再返回,肯定比排序的复杂度要低很多。随后便可以直接返回要找的第k大的数字。,此时对应的元素就是第 k 大。原创 2025-04-27 14:11:06 · 380 阅读 · 0 评论 -
240426 leetcode exercises
还是一道练增删改查基本功的题。让你把第一个链表从某两点断开并删除中间节点,并拼上新的链表。用正常的思路就能解决: 我们首先找到结点和的具体位置并保存。因为要从第a个结点开始删除。所以我们让指针走向第个结点。b的话因为我们后面会直接拼上节点的指针,即第个结点。所以正常遍历就好。接下来让保存好的结点接上。最后让让遍历到list2的尾结点的指针拼上刚才找到结点b的指针。返回list1。🔁进阶版 一遍到位,直接拼接 一开始指向 ,负责走到第 a-1 个节点。 同时指向 ,负原创 2025-04-26 21:29:16 · 1049 阅读 · 0 评论 -
240424 leetcode exercises II
首先用快慢指针找到链表中点,将链表从中点一分为二,然后对左右两段递归排序,最后再利用合并两个升序链表的知识将两个已排序的链表合并成一个有序链表。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。经典的递归合并:比较两个链表头节点,值小的那个接上后面继续合并。p2指向头结点的next指针(也就是p1的下一个节点), 总体而言就是合并链表、查找链表思路的综合应用。原创 2025-04-24 22:56:54 · 858 阅读 · 0 评论 -
240418 leetcode exercises
记给定链表的长度为 n,注意到当向右移动的次数 k≥n 时,我们仅需要向右移动 kmodn 次即可。这样我们可以知道,新链表的最后一个节点为原链表的第 (n−1)−(kmodn) 个节点(从 0 开始计数)。 在两数之和中,我们两重循环枚举的方法放在这里肯定会超时,而当时的快慢指针是分别从头和尾开始,如果两数之和比目标值大那就左移快指针减小数值,反之则慢指针右移,直到找到正确的数字。我们参照两数之和相向双指针的方法,通过枚举一个数、双指针处理另外两个数来解决三数之和。,旋转链表,将链表每个节点向右移动。原创 2025-04-20 04:08:28 · 945 阅读 · 0 评论 -
240419 leetcode exercises
快指针先出发,直到遍历到第n个结点的时候慢指针以同样的速度出发,这样快慢指针之间永远间隔了n−1个节点,即超前了n个节点。 本质思想仍然是“谁小谁先接”,通过递归不断比较当前两个链表的头结点值,较小的那个继续和另一个链表递归合并,直到某个链表为空,返回另一个链表作为终点。每一步我们都比较两个链表当前节点的值,较小的接入新链表,然后对应链表向后移动一格。 遍历结束后,剩余链表(必定是有序的)可以直接接到新链表末尾。步,找到要删除节点的“前一个节点”,让这个“前一个节点”的。个结点,并且返回链表的头结点。原创 2025-04-19 21:37:11 · 800 阅读 · 0 评论 -
240421 leetcode exercises
字典序(Lexicographical Order)就是把序列(比如字符串、数组、单词序列等)当成“字典里的一行行词条”来排序,遵循人们查字典时的顺序习惯。逐位比较如果在第 k位上,A[k]<B[k],那么 A 在字典序中就排在 BB之前;如果 A[k]>B[k,则 A排在 B之后;如果 A[k]=B[k],继续比较下一位,直到遇到不相等的位置或其中一个序列结束。前缀规则如果一个序列是另一个序列的前缀,比如。原创 2025-04-21 15:45:45 · 775 阅读 · 0 评论 -
240420 leetcode exercises
我们将链表的所有节点值依次读入一个数组中。利用数组下标,我们就可以方便地用两个指针从两端向中间移动,判断是否对称。这是一个巧妙的递归方法,模拟双指针的对撞过程,用系统栈来保存“从右向左”的指针(递归栈),同时用一个全局指针。虽然不用数组了,但依然使用了系统递归栈,不是真正意义上的 O(1) 空间。的节点一个个“摘下来”,添加到新链表中,同时将它们从原链表中删除。一直递归到链表尾部,再逐层返回(即从尾往头回溯)。,请你判断该链表是否为回文链表。提取出来组成另一个子链表 B。提取出来组成一个子链表 A,原创 2025-04-20 04:50:12 · 778 阅读 · 0 评论 -
240422 leetcode exercises
但是题目又说, “当 t 很长、要对它执行大量(10亿)子序列判断查询”,在这种变态情况下,我们想刚才那样愚蠢地遍历好像是有点笨拙了。 题目要求我们的函数被调用后输出整个链表,而我们又注意到所写函数是void类型,所以我们只需要执行删除该节点的操作即可。——等价于把原来的 B 节点直接「搬到」A 的位置,然后把原 B 节点从链表里跳过去了。 他是想说什么意思呢,就是在不给你整个链表的情况下,让你根据这个值来将这个节点删除。到当前节点,再跳过后继,实现了在不知道前驱的情况下删除节点的目标。原创 2025-04-21 22:41:25 · 865 阅读 · 0 评论