![](https://img-blog.csdnimg.cn/d714a3bcd9cc476a974f91990a1e0cf8.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode 刷题日志
文章平均质量分 93
LeetCode 刷题日志
库库的里昂
c/c++领域新星创作者
展开
-
【LeetCode刷题日志】622.设计循环队列
为了区别这两种情况,假设队列使用的数组有capacity个存储空间,则此时规定循环队列最多只能有capacity−1个队列元素,当循环队列中只剩下一个空存储单元时,则表示队列已满。根据以上可知,队列判空的条件是front=rear,而队列判满的条件是 front=(rear+1) %capacity。关于循环队列的概念可以参考:「循环队列」,我们可以通过一个数组进行模拟,通过操作数组的索引构建一个虚拟的首尾相连的环。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。原创 2023-11-20 20:41:23 · 17302 阅读 · 5 评论 -
【LeetCode刷题日志】225.用队列实现栈
入栈操作时,首先获得入栈前的元素个数 nnn,然后将元素入队到队列,再将队列中的前n个元素(即除了新入栈的元素之外的全部元素)依次出队并入队到队列,此时队列的前端的元素即为新入栈的元素,且队列的前端和后端分别对应栈顶和栈底。入栈操作时,首先将元素入队到q2,然后将q1的全部元素依次出队并入队列q2 ,此时q2的前端的元素即为新入栈的元素,再将q1和q2互换,则q1的元素即为栈内的元素,q1的前端和后端分别对应栈顶和栈底。可以使用两个队列实现栈的操作,其中q1用于存储栈内的元素,q2作为入栈操作的辅助队列。原创 2023-11-18 22:18:16 · 17522 阅读 · 9 评论 -
【LeetCode刷题日志】232.用栈实现队列
每次pop或peek时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。将一个栈当作输入栈,用于压入push传入的数据;另一个栈当作输出栈,用于 pop和peek操作。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(题号:232.用栈实现队列】【难度:简单】原创 2023-11-19 16:13:18 · 17251 阅读 · 0 评论 -
【LeetCode刷题日志】20.有效的括号
当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。此时,我们可以取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类型,或者栈中并没有左括号,那么字符串s无效,返回False。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回False,省去后续的遍历判断过程。在遍历结束后,如果栈中没有左括号,说明我们将字符串s中的所有左括号闭合,返回True,否则返回False。原创 2023-11-17 23:25:46 · 401 阅读 · 6 评论 -
【LeetCode刷题日志】138.随机链表的复制
当我们完成了拷贝节点的随机指针的赋值,我们只需要将这个链表按照原节点与拷贝节点的种类进行拆分即可,只需要遍历一次。这样,我们可以直接找到每一个拷贝节点S′的随机指针应当指向的节点,即为其原节点S的随机指针指向的节点T的后继节点T′。我们首先将该链表中每一个节点拆分为两个相连的节点,例如对于链表A→B→C,我们可以将其拆分为 A→A′→B→B′→C→C′。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。原创 2023-11-11 19:46:48 · 1031 阅读 · 77 评论 -
【LeetCode刷题日志】160.相交链表
的输入如下(你设计的程序。原创 2023-11-09 12:38:23 · 502 阅读 · 10 评论 -
【LeetCode刷题日志】88.合并两个有序数组
这一方法将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中。注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。的后半部分是空的,可以直接覆盖而不会影响结果。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。那么如何直接避免覆盖。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。严格来说,在此遍历过程中的任意一个时刻,需要合并的数组是 [] 和 [1]。原创 2023-10-30 12:38:51 · 17372 阅读 · 61 评论 -
【LeetCode刷题日志】27.移除元素
例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。的元素,因此输出数组的长度一定小于等于输入数组的长度,我们可以把输出的数组直接写在输入数组上。与方法一不同的是,方法二避免了需要保留的元素的重复赋值操作。实现方面,我们依然使用双指针,两个指针初始时分别位于数组的首尾,向中间移动遍历该序列。的元素的位置继续被覆盖),直到左指针指向的元素的值不等于。重合的时候,左右指针遍历完数组中所有的元素。的元素,并返回移除后数组的新长度。原创 2023-10-30 12:38:43 · 319 阅读 · 42 评论 -
【LeetCode刷题日志】189.轮转数组
用 nnn 表示数组的长度,我们遍历原数组,将原数组下标为 iii 的元素放至新数组下标为 (i+k) mod n(i+k)\bmod n(i+k)modn 的位置,最后将新数组拷贝至原数组即可。方法一中使用额外数组的原因在于如果我们直接将每个数字放至它最后的位置,这样被放置位置的元素会被覆盖从而丢失。该方法为数组的翻转:我们可以先将所有元素翻转,这样尾部的 k mod nk\bmod nkmodn 个元素就被移至数组头部,然后我们再翻转。向右轮转 3 步: [5,6,7,1,2,3,4]原创 2023-10-24 16:39:22 · 17429 阅读 · 18 评论