
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 · 770 阅读 · 0 评论 -
LeetCode 622.设计循环队列
题目描述 622.设计循环队列-力扣(LeetCode) 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。 你的实现应该支持如下操作: • MyCircularQueue(k): 构造器,设置队列长度为 k原创 2021-03-13 17:11:33 · 393 阅读 · 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 · 405 阅读 · 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 · 317 阅读 · 1 评论 -
LeetCode 20.有效的括号
题目描述 20.有效的括号-力扣(LeetCode) 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例1: 输入:s = "()" 输出:true 示例2: 输入:s = "()[]{}" 输出:true 示例3: 输入:s = "(]" 输出:false 思路解析 本题使用C语言,自己建一个栈,给一个指针s从头开始遍历这个字符串,当指针指向 ‘(’ 或 ‘[原创 2021-03-10 16:12:09 · 164 阅读 · 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 · 4155 阅读 · 9 评论 -
LeetCode 链表的回文结构
链表的回文结构 题目描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 示例1 1->2->2->1 示例2 1->2->3->4->5->4->3->2->1 使用语言: C语言 思路解析 回文结构其实就是一个链表关于中间对称,我们可以用快慢指针法求出中间一个数,若为偶数个节点则为中间第二原创 2021-02-01 21:21:33 · 487 阅读 · 1 评论 -
LeetCode 160.相交链表
相交链表 题目描述 编写一个程序,找到两个单链表相交的起始节点。 示例1 示例2 使用语言: C语言 思路解析 情况一:若两个链表有一个为空,则不相交返回空 情况二:若两个链表都不为空,且两个链表不相交,则两个链表的尾节点位置不相等 情况三:若两个链表的尾节点位置相等则两个链表必相交,先求出两个链表的长度,让长的链表的头指针先走两链表长度差值个节点,然后两个链表的头指针同时走,当两个头指针第一次指向的位置相等,则为两个单链表相交的起始节点 图解如下: 代码实现 struct ListNode *get原创 2021-02-01 20:26:01 · 339 阅读 · 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 · 288 阅读 · 2 评论 -
LeetCode-链表分割
链表分割 题目描述 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 示例1 思路解析 开两个新链表将小于x的节点放入第一个新链表中,将大于x的节点放入第二个新链表中,然后将第二个新链表尾插到第一个新链表上 图解如下: 代码实现 class Partition { public: ListNode* partition(ListNode* pHead, int x)原创 2021-01-31 20:24:06 · 455 阅读 · 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 · 426 阅读 · 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 · 439 阅读 · 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 · 282 阅读 · 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 · 296 阅读 · 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 · 271 阅读 · 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 · 220 阅读 · 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 · 188 阅读 · 2 评论