![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣
文章平均质量分 56
力扣刷题
于指尖飞舞
妄想在互联网沙滩上留下一行淡淡的脚印……
展开
-
力扣:通过《84.柱状图中最大的矩形》求解《85. 最大矩形》
利用两次单调栈寻找左右边界,枚举每一个可存在的矩形,即可求解最大矩形。枚举每一行,对每一行求最大矩形面积。输出每个数左边第一个比它小的数。原创 2023-04-24 19:17:25 · 415 阅读 · 0 评论 -
力扣:颜色分类
的位置所在的数字,由于。位置的数等待下一次循环。的位置所在的数字,此时。的位置的数字不知道是。维护如图所示性质,对。原创 2023-04-23 15:07:14 · 90 阅读 · 0 评论 -
力扣:文本左右对齐
③单词之间的空格需要尽量均匀,如果空格数不能被(单词数量-1)整除,可让左边比右边多1。对于每一行,首先做到对空格平均分配。空格可以安插在两两单词间隙之间,设单词间隙的个数为。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。④对于最后一行,只需实现左对齐,并且不用在单词之间添加额外空格。⑤对于除最后一行的其他行,如果只有一个单词,则左对齐与④一样。,如果有多出来的空格该如何分配呢?②在单词之间填补空格,使得每行的长度是。所以我们把平均分配后剩下的空格数(①每行尽可能放多的单词。原创 2023-04-21 20:18:23 · 605 阅读 · 0 评论 -
力扣:两数相除
大于某一项,则说明该被除数包含该项,答案中加入。预存起来,从大到小枚举。,可将该二进制转换为。原创 2023-04-10 21:37:40 · 331 阅读 · 0 评论 -
力扣:串联所有单词的子串(滑动窗口+哈希)
次滑动窗口移动,每次移动加一个元素,减一个元素,一共有。,用来维护窗口内每个单词所对应的数量。的长度即words中单词的数量,用。看作独立存在的元素,维护一个长度为。作为滑动窗口的结尾,用来维护长度。表示两个集合中同时存在的单词的数量。独立存在(可看成一个元素)。对每个视作独立元素做滑动窗口,为长度进行分割,则每一个。③在该串上,对每一个长度为。里面的单词所对应的数量。原创 2023-04-10 20:30:34 · 304 阅读 · 0 评论 -
力扣:正则表达式匹配
字符与前面的字母看作一个整体,所以。字符与前面的字母看作一个整体,所以。字符与前面的字母看作一个整体。字符与前面的字母看作一个整体,个字符匹配,同时满足。原创 2023-04-05 16:40:27 · 582 阅读 · 0 评论 -
力扣:打开转盘锁
你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字:‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以解锁的数字,你需原创 2020-07-25 20:45:46 · 174 阅读 · 0 评论 -
力扣:岛屿数量(BFS)
岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出: 1示例2:输入:[['1','1','0','0','0'],[原创 2020-07-23 09:57:23 · 331 阅读 · 0 评论 -
力扣:设计循环队列
力扣:设计循环队列设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。如果队列原创 2020-07-22 16:56:53 · 155 阅读 · 0 评论 -
力扣:钥匙和房间
有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回 true,否则返原创 2020-08-09 21:37:40 · 167 阅读 · 0 评论 -
力扣:01矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:1、给定矩阵的元素个数不超过 10000。2、给定矩阵中至少有一个元素是 0。3、矩阵中的元素只在四个方向上相邻: 上、下、左、右。代码:class Solution {public:原创 2020-08-09 08:09:18 · 271 阅读 · 0 评论 -
力扣:图像渲染
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过上色渲染后的图原创 2020-08-07 20:27:40 · 244 阅读 · 0 评论 -
力扣:字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例1:输入:s = "3[a]2[bc]"输出:"aaabcbc"示例2:输入:s = "3原创 2020-08-06 22:08:15 · 309 阅读 · 0 评论 -
力扣:用队列实现栈
使用队列实现栈的下列操作:1、push(x) – 元素 x 入栈2、pop() – 移除栈顶元素3、top() – 获取栈顶元素4、empty() – 返回栈是否为空注意:1、你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。2、你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。3、你可以假设所有操作都是有原创 2020-08-05 18:07:44 · 161 阅读 · 0 评论 -
力扣:用栈实现队列
使用栈实现队列的下列操作:1、push(x) – 将一个元素放入队列的尾部。2、pop() – 从队列首部移除元素。3、peek() – 返回队列首部的元素。4、empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:1、你只能原创 2020-08-04 22:03:55 · 195 阅读 · 0 评论 -
力扣:反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:"Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"提示:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。代码:class Solution {public: void reverse(string s,int start,int end) { char原创 2020-08-26 20:28:52 · 281 阅读 · 0 评论 -
力扣:反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]思路:be原创 2020-08-21 18:38:19 · 223 阅读 · 0 评论 -
力扣:实现strStr()
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例1:输入: haystack = "hello", needle = "ll"输出: 2示例2:输入: haystack = "aaaaa", needle = "bba"输出: -1说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对原创 2020-08-19 18:52:39 · 143 阅读 · 0 评论 -
力扣:翻转单词的字符串
给定一个字符串,逐个翻转字符串中的每个单词。示例1:输入: "the sky is blue"输出: "blue is sky the"示例2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例3:输入: "a good example"输出: "example good a"解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。说明:无空格字原创 2020-08-19 11:04:14 · 179 阅读 · 0 评论 -
力扣:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。思路:首先要找出最短字符串的长度,因为最长公共前缀的大小就取决于最短的那个字符串,然后一列一列的遍历来源于:题解链接代码:class Solution {publi原创 2020-08-17 16:44:03 · 140 阅读 · 0 评论 -
力扣:旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例2:输入: 0->1->2->NUL原创 2020-09-17 21:38:35 · 109 阅读 · 0 评论 -
力扣:复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:1、val:一个表示 Node.val 的整数。2、random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。示例1:输入:head = [[7,null],[13,0],[11,4],[10,2],原创 2020-09-16 13:25:17 · 102 阅读 · 0 评论 -
力扣:扁平化多级双向链表(递归)
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7,8,11,12,9,10,4,5,6]解释:输入的多级列表如下图所示:扁原创 2020-09-15 22:54:16 · 166 阅读 · 0 评论 -
力扣:两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:1、carry进位表示1,carry等于每个节点对位求和/1原创 2020-09-13 15:13:46 · 590 阅读 · 0 评论 -
力扣:合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4迭代法:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0),原创 2020-09-12 15:00:44 · 122 阅读 · 0 评论 -
力扣:回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路:把值放到数组里,然后双指针比较。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L原创 2020-09-10 16:20:27 · 94 阅读 · 0 评论 -
力扣:奇偶链表
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例2:输入: 2->1->3->5->6->4-&g原创 2020-09-09 15:45:01 · 105 阅读 · 0 评论 -
力扣:移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5思路:设置哨兵节点x,以便能删除头节点。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int原创 2020-09-09 15:40:57 · 139 阅读 · 0 评论 -
力扣:反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : v原创 2020-09-08 12:56:04 · 192 阅读 · 2 评论 -
力扣:删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路:定义一个虚拟头节点x,为能删除头节点。定义快慢指针,快慢指针之间的距离是n,如果fast->next指向null,则slow指的是要删除的节点。代码:/** * Defi原创 2020-09-06 16:10:52 · 187 阅读 · 0 评论 -
力扣:相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例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,原创 2020-09-01 19:43:12 · 111 阅读 · 0 评论 -
力扣:环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。**说明:**不允许修改给定的链表。示例1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos = 0原创 2020-08-29 17:41:32 · 130 阅读 · 0 评论 -
力扣:环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例3:输入:head = [1], pos = -1输出:原创 2020-08-28 20:02:15 · 112 阅读 · 0 评论 -
力扣:设计链表(单双链表实现)
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一原创 2020-08-28 19:57:57 · 287 阅读 · 0 评论 -
力扣:目标和
给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种方法让最终目标和为3。原创 2020-08-01 20:38:42 · 255 阅读 · 0 评论 -
力扣:克隆图
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node { public int val; public List<Node> neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。邻接列表 是用于表示原创 2020-08-01 20:34:34 · 209 阅读 · 0 评论 -
力扣:岛屿数量(DFS)
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:[['1','1','1','1','0'],['1','1','0','1','0'],['1','1','0','0','0'],['0','0','0','0','0']]输出: 1示例2:输入:[['1','1','0','0','0'],['1','原创 2020-07-30 18:01:35 · 163 阅读 · 0 评论 -
力扣:逆波兰表达式求值
根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:1.整数除法只保留整数部分。2.给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例2:输入: ["4", "13", "5", "/", "+"]输出: 6原创 2020-07-30 17:58:52 · 147 阅读 · 0 评论 -
力扣:每日温度
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。思路:构造一个递减栈,把temperatur原创 2020-07-29 09:24:58 · 235 阅读 · 0 评论 -
力扣:有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:1、左括号必须用相同类型的右括号闭合。2、左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出: false示例5:输入: "{[]}"输出: true根据原题解产生自己的思路,原创 2020-07-27 20:42:44 · 277 阅读 · 0 评论