![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
刷题
文章平均质量分 71
leetcode、牛客网、领扣
It‘s so simple
这个作者很懒,什么都没留下…
展开
-
牛客网:连续子数组的最大和(动态递归解法)
目录题目描述题解题解代码题目描述连续子数组的最大和输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例1:输入:[1,-2,3,10,-4,7,2,-5]输出:18解释:输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和 18。题解分析题目可知,本题要求一个所有子数组和的最大值,因此我们考虑使用动态递归来进行求解。接下来我们原创 2021-05-04 22:04:24 · 489 阅读 · 0 评论 -
牛客网:删除链表中的重复结点(图文并茂)
题目描述删除链表中的重复结点在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。示例1:输入:{1,2,3,3,4,4,5}输出:{1,2,5}题解本题可采用三个指针,指针prev用来包存前一个结点的信息,指针tail 和 tmp 用来寻找重复结点。(因为链表是已经排好序的,所有重复结点一定排在一起)初始情况①当tail -> val 和 tmp -> val 不相同时,更新这三个指针的位置,则prev = tmp 、tmp原创 2021-02-17 12:01:28 · 466 阅读 · 0 评论 -
牛客网:链表的回文结构(图文并茂)
题目描述链表的回文结构对于一个链表,请设计一个**时间复杂度为O(n),额外空间复杂度为O(1)**的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900输入:1->2->3->2->1输出:true题解先用快慢指针得到该链表的中间结点和尾结点,然后再将中间结点所指向的位置往后进行逆置,得到的逆置后的链表和原链表的val一 一做比较,如果都相等,则为回文结构。初始情况:mid 为慢指针,最原创 2021-02-13 10:38:51 · 349 阅读 · 0 评论 -
牛客网:链表分割(图文并茂)
题目描述链表分割现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。示例1:输入:[9,8,6,4,2,1],5输出:[4,2,1,9,8,6]题解本题可以用两个链表来分别存放大于x的结点和小于x的结点,然后在原链表走完之后,使存放小于x结点的链表的尾的next指向存放大于x结点的链表即可。初始情况:①首先创建两个头结点(a1和a2),分别作为存放小于x的结点链表的头原创 2021-02-10 21:56:47 · 160 阅读 · 0 评论 -
牛客网:链表中倒数第k个结点(图文并茂)
题目描述链表中倒数第k个结点输入一个链表,输出该链表中倒数第k个结点。示例1:输入:1,{1,2,3,4,5}输出:{5}题解本题依旧采用快(fast)慢(slow)指针即可,题目要求求出链表中倒数第k个结点,那么先让fast指针先走k步,然后在让slow指针开始走,两个指针同时走,每次走一步,直至fast 等于NULL时结束。初始情况:①让fast先走k步,(本例中k为1)②再让slow指针开始走,两个指针每次向后走一个③重复②的过程,直至fast == NULL结束原创 2021-02-09 10:28:52 · 170 阅读 · 0 评论 -
LeetCode-965:单值二叉树(图文并茂——C语言实现)
文章目录1.题目描述1.1 示例11.2 示例22.题解3.题解代码1.题目描述965.单值二叉树如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。1.1 示例1输入:[1,1,1,1,1,null,1]输出:true1.2 示例2输入:[2,2,2,5,2]输出:false2.题解本题是很简单的一道二叉树问题,我们可以用递归分治的思想来做这个题,即每次只判断当前根节点和其对应的左右孩子的值原创 2021-03-17 15:56:29 · 161 阅读 · 0 评论 -
Leetcode-622:设计循环队列
题目描述622.设计循环队列设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取原创 2021-03-10 13:39:06 · 95 阅读 · 0 评论 -
LeetCode-232:用栈实现队列
题目描述232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop原创 2021-03-10 12:36:27 · 73 阅读 · 0 评论 -
LeetCode-225:用队列实现栈(图文并茂)
题目描述225.用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop原创 2021-03-09 15:33:39 · 236 阅读 · 0 评论 -
LeetCode-20:有效的括号
题目描述20.有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例1:输入:s = “{[]}”输出:true示例2:输入:s = “([)]”输出:false题解本题的思想其实很简单,用栈来实现,从头开始遍历字符串,如果遇到 ‘(’ 、’{’、’[’,则入栈,一旦遇到 ‘)’、’}’、’]’,则出栈做匹配,如果能够匹配上,则继续原创 2021-03-09 15:04:31 · 64 阅读 · 0 评论 -
LeetCode-147:对链表进行插入排序(图文并茂)
题目描述147.对链表进行插入排序对链表进行插入排序。从第一个元素开始,该链表可以被认为已经部分排序,每次迭代时,从输入数据中移除一个元素,并原地将其插入到已排好序的链表中。(具体动画演示详见原题)示例1:输入: 4->2->1->3输出: 1->2->3->4示例2:输入: -1->5->3->4->0输出: -1->0->3->4->5题解如题目描述所说,我们可以从第一个元素开始,认为是已经排原创 2021-02-17 11:40:09 · 313 阅读 · 0 评论 -
LeetCode-138:复制带随机指针的链表(图文并茂)
题目描述138.复制带随机指针的链表给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.ran原创 2021-02-17 10:54:27 · 1184 阅读 · 4 评论 -
LeetCode-142:环形链表II(图文并茂)
题目描述142.环形链表II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例1:输入:head = [1,2], pos = 0输出:返回索引为 0 的链表节点解释:链表中原创 2021-02-16 21:18:26 · 215 阅读 · 0 评论 -
LeetCode-141:环形链表(图文并茂)
题目描述环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗示例1:输入:head = [3,2,原创 2021-02-16 19:24:06 · 315 阅读 · 0 评论 -
LeetCode-160:相交链表(图文并茂)
题目描述160.相交链表编写一个程序,找到两个单链表相交的起始节点。示例1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在原创 2021-02-15 09:02:58 · 212 阅读 · 0 评论 -
LeetCode-21:合并两个有序链表(图文并茂)
题目描述21.合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。,l1 和 l2 均按 非递减顺序排列示例1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1 = [], l2 = []输出:[]示例3:输入:l1 = [], l2 = [0]输出:[0]题解题中要求的是新链表是通过拼接完成两个链表的合并的,因此不需要创建新的结点,只需要定义头尾指针原创 2021-02-10 21:16:02 · 251 阅读 · 0 评论 -
LeetCode-876:链表的中间结点(图文并茂)
题目描述876.链表的中间结点给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])示例2:输入:[1,2,3,4,5,6]输出:此列表中的结点 4 (序列化形式:[4,5,6])题解要求链表的中间结点,我们可以使用快慢指针来求该题。定义一个慢指针slow,它每次往后走一个,再定义一个快指针fast,他每次往后走两个,快慢指针同时走,当f原创 2021-02-09 09:59:24 · 96 阅读 · 0 评论 -
LeetCode-206:反转链表(图文并茂)
题目描述206.反转链表反转一个单链表示例1:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL题解定义两个指针re1和re2,re1用来记录每次链表更新后的首地址,re2用来使后一个结点指向前一个结点;再定义一个指针re3,用来保存re2的下一个结点,防止结点发生丢失,就这样迭代的向下走即可。初始情况:①re1先指向NULL,表示它为最后一个结点,定义re3指针,保存re2的下一原创 2021-02-09 09:38:58 · 467 阅读 · 0 评论 -
LeetCode-203:移除链表元素(图文并茂)
题目描述203.移除链表元素删除链表中等于给定值 val 的所有节点。示例1:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5题解很简单的一道链表习题,定义两个指针plist和tail,分别指向链表的头结点和头结点的下一个结点,从tail指针开始一直往后走,如果值不等于val,则 plist指向tail,如果遇到等于val的值,则 tail 继续往后走即可(相当于跳过该结点)。原创 2021-02-08 11:00:00 · 192 阅读 · 0 评论 -
LeetCode-989:数组形式的整数加法(图文并茂)
题目描述989.数组形式的整数加法对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。示例1:输入:A = [1,2,0,0], K = 34输出:[1,2,3,4]解释:1200 + 34 = 1234示例2:输入:A = [2,7,4], K = 181输出:[4,5,5]解释:274 + 181 = 455示例3:原创 2021-02-08 10:33:37 · 137 阅读 · 0 评论 -
LeetCode-189:旋转数组(图文并茂)
题目描述189.旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1原创 2021-02-08 09:42:56 · 210 阅读 · 0 评论 -
LeetCode-88:合并两个有序数组(图文并茂)
题目描述88.合并两个有序数组给定两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例2:输入原创 2021-02-07 16:54:23 · 221 阅读 · 0 评论 -
LeetCode-26:删除排序数组中的重复项(图文并茂)
题目描述26.删除排序数组中的重复项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 你不需要考虑数组中超出新长度后面的元素。示例1:输入:nums = [1,1,2]输出:2,[1,2]示例2:输入:nums =[0,0,1,1,1,2,2,3,3,4]输出:5,[0,1,2,3,4]题解要删除排序数组中的重复项,我们可以考虑用原创 2021-02-07 10:52:54 · 141 阅读 · 0 评论 -
LeetCode-27:移除元素(图文并茂)
题目描述27.移除元素给定一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]示例2:输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5, nums = [原创 2021-02-07 09:20:04 · 206 阅读 · 0 评论