LeetCode
文章平均质量分 57
LeetCode练习总结
双鱼211
这个作者很懒,什么都没留下…
展开
-
求连续子数组最大和
连续子数组最大和(分治+动态规划)题目描述:输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例:输入:[1,-2,3,10,-4,7,2,-5]返回值:18说明:输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和 18。思路分析:先求出以 i 结尾的所有的局部最大的连续子序列和,而局部的连续子序列最大和就求 max(F(i原创 2021-08-12 01:39:32 · 657 阅读 · 0 评论 -
LeetCode 622.设计循环队列
题目描述622.设计循环队列-力扣(LeetCode)设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:• MyCircularQueue(k): 构造器,设置队列长度为 k原创 2021-03-13 17:11:33 · 325 阅读 · 1 评论 -
LeetCode 232.用栈实现队列
题目描述232.用栈实现队列-力扣(LeetCode)请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:• void push(int x) 将元素 x 推到队列的末尾• int pop() 从队列的开头移除并返回元素• int peek() 返回队列开头的元素• boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有原创 2021-03-13 13:57:00 · 252 阅读 · 0 评论 -
LeetCode 225.用队列实现栈
题目描述225.用队列实现栈-力扣(LeetCode)请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:• void push(int x) 将元素 x 压入栈顶。• int pop() 移除并返回栈顶元素。• int top() 返回栈顶元素。• boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是原创 2021-03-11 15:07:46 · 229 阅读 · 1 评论 -
LeetCode 20.有效的括号
题目描述20.有效的括号-力扣(LeetCode)给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例1:输入:s = "()"输出:true示例2:输入:s = "()[]{}"输出:true示例3:输入:s = "(]"输出:false思路解析本题使用C语言,自己建一个栈,给一个指针s从头开始遍历这个字符串,当指针指向 ‘(’ 或 ‘[原创 2021-03-10 16:12:09 · 134 阅读 · 0 评论 -
LeetCode 141.带环问题(判断是否带环) 142.带环问题(返回入环点)
目录:1.带环问题(判断是否带环)(1)题目描述(2)思路解析a.问题: 怎么证明快指针和慢指针一定会在环里相遇,而不是一直错过?b.问题:如果slow一次走一步,fast一次走3步?fast一次走4步?fast一次走n步?能追上吗?(3)代码实现2.带环问题(返回入环点)(1)题目描述(2)思路解析(3)代码实现1.带环问题(判断是否带环)(1)题目描述给定一个链表,判断链表中是否有环如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用原创 2021-02-02 11:10:37 · 3888 阅读 · 9 评论 -
LeetCode 链表的回文结构
链表的回文结构题目描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。示例11->2->2->1示例21->2->3->4->5->4->3->2->1使用语言: C语言思路解析回文结构其实就是一个链表关于中间对称,我们可以用快慢指针法求出中间一个数,若为偶数个节点则为中间第二原创 2021-02-01 21:21:33 · 393 阅读 · 1 评论 -
LeetCode 160.相交链表
相交链表题目描述编写一个程序,找到两个单链表相交的起始节点。示例1示例2使用语言: C语言思路解析情况一:若两个链表有一个为空,则不相交返回空情况二:若两个链表都不为空,且两个链表不相交,则两个链表的尾节点位置不相等情况三:若两个链表的尾节点位置相等则两个链表必相交,先求出两个链表的长度,让长的链表的头指针先走两链表长度差值个节点,然后两个链表的头指针同时走,当两个头指针第一次指向的位置相等,则为两个单链表相交的起始节点图解如下:代码实现struct ListNode *get原创 2021-02-01 20:26:01 · 260 阅读 · 1 评论 -
LeetCode-206.反转链表
反转链表题目描述反转一个单链表示例1输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL使用语言: C语言思路解析给三个指针一个n1指向NULL,一个n2指向head,一个*n3用于保存下一个节点的地址,然后让n2指向n1图解如下:代码实现struct ListNode* reverseList(struct ListNode* head){ if(head == NULL原创 2021-01-31 20:53:57 · 250 阅读 · 2 评论 -
LeetCode-链表分割
链表分割题目描述现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。示例1思路解析开两个新链表将小于x的节点放入第一个新链表中,将大于x的节点放入第二个新链表中,然后将第二个新链表尾插到第一个新链表上图解如下:代码实现class Partition {public: ListNode* partition(ListNode* pHead, int x)原创 2021-01-31 20:24:06 · 383 阅读 · 1 评论 -
[LeetCode] 203.移除链表元素, 21.合并两个有序链表
目录:1.移除链表元素题目描述思路解析代码实现2.合并两个有序链表题目描述思路解析代码实现:1.移除链表元素题目描述删除链表中等于给定值 val 的所有节点。示例1:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5使用语言: C语言思路解析遍历找出所有不是val的节点,尾插到新链表上,等于val的节点尾插到新链表上,不等于val的节点直接free掉图解如下:代码实现stru原创 2021-01-29 18:50:04 · 264 阅读 · 2 评论 -
[LeetCode] 876.求链表的中间节点 , [剑指offer]求链表中倒数第K个节点
目录:1.求链表的中间节点题目描述思路解析:代码实现:2.求链表中倒数第K个节点题目描述思路解析:代码实现:1.求链表的中间节点题目描述给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例1输入:[1,2,3,4,5]输出:此列表中的结点 3示例2输入:[1,2,3,4,5,6]输出:此列表中的结点 4使用语言: C语言思路解析:此题可以使用快慢指针解,给定两个指针指一个快指针fast,一个慢指针slow,使两个指针向分别指向原创 2021-01-29 16:04:17 · 347 阅读 · 2 评论 -
[LeetCode] 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,1,5], K = 806输出:[1,0,2,1]解释:215 + 806 = 1021使用语言: C语言思路原创 2021-01-28 17:31:08 · 239 阅读 · 2 评论 -
[LeetCode] 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,2,3,4]使用语言: C语言思路解析: 因为空间复杂度为O(1)所以只能使用原地算法,仔细观察会发原创 2021-01-27 12:34:05 · 234 阅读 · 1 评论 -
[LeetCode]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]使用语言: C语言思路解析原创 2021-01-27 11:36:17 · 210 阅读 · 3 评论 -
[LeetCode] 27. 移除元素
移除元素题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1: 给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,1,2,原创 2021-01-25 22:32:53 · 159 阅读 · 1 评论 -
[LeetCode] 26. 删除排序数组中的重复项
删除排序数组中的重复项题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5原创 2021-01-25 22:11:01 · 137 阅读 · 2 评论