
LC 栈、队列、串及其他数据结构
Leetcode与Lintcode 栈、队列及其他数据结构
记录算法题解
数学、算法爱好者,喜爱钻研各种数学和算法题。欢迎交流!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Leetcode】3043. Find the Length of the Longest Common Prefix
各自取一个数,求它们的最长公共前缀的长度(就是看成字符串后求),题目保证只含非负整数,且没有前导。里的所有数插进Trie,然后遍历。问最长的最长公共前缀的长度。求最长公共前缀长度。原创 2024-12-04 17:32:07 · 463 阅读 · 0 评论 -
【Leetcode】224. Basic Calculator
后缀表达式是很容易计算的,这题的标准做法是先转化为后缀表达式,然后再按照计算机容易操作的后缀表达式来直接计算。3、如果遇到操作符,此时如果栈空,则直接入栈,否则比较该操作符与栈顶的优先级,如果栈顶优先级高或等于该操作符,则将栈顶弹出并append到。的意思是下面的运算符还未定义),接着我们遍历表达式,遍历的时候得到每个项和其前面的运算符。因为这题是求值,所以可以再开一个栈存数字,然后在上面算法的弹符号栈的时候直接进行计算。如果下一项的运算符是加减法,则说明前面遍历完的项可以合并了,如果是加法,则状态变为。原创 2020-05-20 10:26:37 · 244 阅读 · 1 评论 -
【Leetcode】128. Longest Consecutive Sequence
数组,求其中的一个子集,这个子集的数可以组成一个尽量长的连续的序列,问这个序列最长的长度。原创 2020-01-06 14:52:05 · 141 阅读 · 1 评论 -
【Leetcode】2334. Subarray With Elements Greater Than Varying Threshold
如果存在,返回任意一个满足条件的子数组的长度;的区间就行了,可以使用单调栈。所以我们只需要枚举形如。的子数组使得该子数组每个数都大于。原创 2024-08-19 11:06:55 · 1035 阅读 · 0 评论 -
【Leetcode】2661. First Completely Painted Row or Column
这个数涂色,问第一次将某一行或者列涂满的最小的。原创 2024-08-19 06:50:15 · 701 阅读 · 0 评论 -
【Leetcode】901. Online Stock Span
,并返回上一个比它大的整数和它之间的下标之差。构造一个类,这个类每次接受一个整数(范围。,每次操作时空复杂度。原创 2024-08-18 09:06:00 · 259 阅读 · 0 评论 -
【Leetcode】2364. Count Number of Bad Pairs
在哈希表里出现的次数。的数对个数,可以开一个哈希表存。来讲满足条件的数对个数就是。,问数组中有多少个数对。原创 2024-08-14 01:43:09 · 332 阅读 · 0 评论 -
【Leetcode】1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit
当然也可以用一个BBST来维护区间信息。这里维护区间每个数出现的次数。我们用两个单调双端队列维护。的最大值和最小值的下标,从而也就能得到。的时候,收缩左端点。,求最长的极差小于等于。的子数组,返回其长度。,再给定一个非负整数。的极差不会变小,从而。原创 2024-07-15 20:47:32 · 760 阅读 · 0 评论 -
【Leetcode】1358. Number of Substrings Containing All Three Characters
枚举子串右端点,对于每个右端点,找到最右边的左端点使得中间的子串满足条件,如果这样的左端点下标为。,那么该右端点对应的子串数量为。,问每个字母都含的子串数量。原创 2024-01-09 12:28:23 · 460 阅读 · 0 评论 -
【Leetcode】1944. Number of Visible People in a Queue
从右向左遍历,维护一个严格单调下降的栈,加入一个数的时候,这个人如果违反了下降性质,那么pop栈顶,栈顶是这个人能看到的人,从而将答案加。每个数字代表这个人的高度,他向右看,可以看到的人满足的条件是他们两个人之间的人都比他们俩个子矮。问每个人向右看能看到几个人。容易知道被pop的人以后不会被看到了。除了被pop的人之外,如果栈里还有数,那么这个人比当前的人高,并且也能被看到,则答案还需要再加一次。原创 2024-01-08 16:26:05 · 435 阅读 · 0 评论 -
【Leetcode】323. Number of Connected Components in an Undirected Graph
题目地址:https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph/求无向图的连通分量,可以假定没有平行边。可以用DFS求解,设一个visited数组,每遇到一个未访问过的节点就对其进行DFS,同时将搜索到的节点都标记为访问过;访问的同时统计连通分量的个数。思想上类似于floodfil...原创 2020-02-28 15:07:33 · 478 阅读 · 2 评论 -
【Leetcode】2090. K Radius Subarray Averages
的子数组的平均值,除不尽直接取整。的每个数为中心,半径为。,再给定一个非负整数。原创 2024-01-07 13:39:19 · 419 阅读 · 0 评论 -
【Leetcode】1528. Shuffle String
再给定一个同长数组。原创 2024-01-05 11:18:08 · 388 阅读 · 0 评论 -
【Leetcode】2353. Design a Food Rating System
先用一个哈希表存每个菜系都有哪些食物及其评分,评分按从高到低排序。为了能修改评分,我们还需要一个哈希表存每个食物属于哪个菜系,并且这个食物评分是多少。这样修改的时候,先查一下这个食物的老的评分和菜系,再将该食物在哈希表里的评分信息改成新的评分。2、返回某个菜系中评分最高的那个食物的名字。如果评分相同则返回名字字典序最小的那个食物的名字。每个食物有三个属性,菜系、评分和名字。每个食物只能属于一个菜系。1、修改某个食物的评分;原创 2023-11-02 13:33:34 · 209 阅读 · 0 评论 -
【Leetcode】2351. First Letter to Appear Twice
问第一次开始出现了两次的字符是哪个。“第一次出现了两次”的意思是从左向右看,第一次出现了第二次的字符。原创 2023-11-02 10:16:19 · 67 阅读 · 0 评论 -
【Leetcode】2316. Count Unreachable Pairs of Nodes in an Undirected Graph
先用并查集统计一下每个连通块的点数,设点数为。条边,问有多少个点对是不连通的。个顶点的无向图,给出图中的。原创 2023-11-02 02:45:37 · 85 阅读 · 0 评论 -
【Leetcode】1625. Lexicographically Smallest String After Applying Operations
的位置永远是固定的,而旋转只需要枚举旋转。问能得到的字典序最小的字符串是什么。为奇数,那么我们要枚举奇数位加多少次。为偶数,那么无论怎么旋转,能被加。这些情况能产生的新字符串,加。的下标为奇数的地方加上。原创 2023-11-01 14:38:17 · 155 阅读 · 0 评论 -
【Leetcode】1624. Largest Substring Between Two Equal Characters
任取其中两个不同位置的相同字符,其中间有个子串,问这个子串的最长长度。原创 2023-11-01 14:00:26 · 119 阅读 · 0 评论 -
【Leetcode】424. Longest Repeating Character Replacement
可以用这个结果更新答案。可以证明,左端点是不会回退的,如果回退,那么对于回退后的左边界和新的右边界(即。个字母换成别的大写字母,问能使得其某个单一字母组成的子串最长的调整策略下,那个单一字母子串的最长长度。应当是最左边的使得窗口内出现次数最多的那个字符的出现次数大于等于窗口长度。,这样的话将除了这个次数最多的字母之外的其余字母都调整掉即得长度。的情形下,那么这个回退的左边界更优,这就矛盾了。)有一个调整策略,我们将这个调整策略应用到右边界是。枚举这个最长单一字符子串的右边界,当右边界为。原创 2023-10-08 16:01:30 · 113 阅读 · 0 评论 -
【Leetcode】1578. Minimum Time to Make Rope Colorful
对一段相同字母的片段,只能保留一个字符,显然保留代价最大的字母最好,所以就删掉除了代价最大的那个字符以外的字符。(删除的时候假定字母的下标没有改变)。相邻字母都不同,最小的删除总代价是多少。,每个位置上的字母的删除代价由一个数组。原创 2023-02-28 07:49:05 · 249 阅读 · 0 评论 -
【Leetcode】1419. Minimum Number of Frogs Croaking
每叫完一个字母,就走到下一个状态。我们可以维护在每个状态上的青蛙的数量。遍历字符串,如果当前字母的出发状态有青蛙,就将这个青蛙移动到下一个状态上去。的青蛙不算,因为这个青蛙已经叫完了,它可以下一轮再叫一轮)。可以想象这些青蛙在跳一个状态机,初始状态为。的状态上的青蛙总数的最大值(在状态。有若干青蛙在叫,每次会叫出字符串。子序列就代表一次完整的叫声。,这些字符串会混在同一个长。至少是多少只青蛙叫产生的。原创 2023-02-27 02:02:52 · 344 阅读 · 0 评论 -
【Leetcode】1400. Construct K Palindrome Strings
否则的话,可以让这些字母全用上组成若干个回文串,剩下的字母如果恰好够,则就构造出来了,否则把那些回文串的字母拿出来偶数个凑够。然后数一下奇数次数的字母有多少个,如果这个个数大于了。,那这些字母组成的回文串个数必然大于。,问这个字符串的所有字符可否构成。由于字母总个数大于等于。的只含小写字母的字符串。原创 2023-02-26 07:14:45 · 213 阅读 · 0 评论 -
【Leetcode】1386. Cinema Seat Allocation
先用位运算表示一下有占据位置的行的情况,然后分情况讨论来累加,最后加上。个位置,给定若干已经占据的位置,问能安排多少个。原创 2023-02-19 13:07:15 · 304 阅读 · 0 评论 -
【Leetcode】527. Word Abbreviation
1、每个单词的缩写格式是其前缀 + 省略的字符个数 + 最后一个字符,但要越短越好;2、如果多个单词缩写相同,那么要选取最长的前缀,使得这些单词缩写变得不同;3、如果缩写没有使得单词变得更短,那么不缩写。给定若干小写字母的单词,每个单词长度都大于。要求返回的时候按原数组相同顺序排序。原创 2023-01-31 13:41:54 · 401 阅读 · 0 评论 -
【Leetcode】710. Random Pick with Blacklist
中的若干个下标的黑名单。要求实现一个方法,该方法获取黑名单下标之外的随机的。的数,如果不在黑名单则直接返回,否则映射一下再返回。个不在黑名单的下标做一个映射。个下标不在黑名单之中,我们可以在前。的下标,每个下标要等概率返回。个下标在黑名单之中,那么A的后。个在黑名单之中的下标到后。原创 2023-01-30 10:33:47 · 335 阅读 · 0 评论 -
【Leetcode】723. Candy Crush
每一轮开始先求出所有要被消去的位置,存起来,然后将其消去即可。找位置的时候,只需要判断其上下是否都与其相等,或者其左右是否都与其相等。消去的时候,可以遍历每一列,然后进行整体的消去。的段就会同时都被消掉。每一轮找到所有要被消掉的数之后,将上面的数向下填充,上面空出的位置填。这是糖果消消乐的局面,每一轮要进行如下操作:如果某个位置的左右延伸长度。问经过若干轮直到无法再消去新的块的时候,矩阵。是消去的轮数,取决于具体数据),空间。的段都相等,或者其上下延伸长。的段都相等,那么组成长度为。原创 2023-01-29 02:32:15 · 519 阅读 · 0 评论 -
【Leetcode】418. Sentence Screen Fitting
的单词为某一行的第一个单词的时候,这一行能填多少个单词。接下来枚举每一行,如果已经知道了当前行的第一个单词下标,则当前行有多少个单词已经知道了,直接累加单词数再枚举下一行;如果不知道,则暴力求出当前行填多少个单词,并且将信息存入哈希表。最后只需要返回总共的单词数除以。列的屏幕,我们要将单词列表顺次填写到每一行中,所有单词填完之后再填一轮,如此下去。除了每行第一个单词之外,其余单词填的时候必须前面加一个空格,并且同行两个单词之间最多一个空格。开一个哈希表,存这样的信息:当下标。原创 2023-01-24 19:27:16 · 412 阅读 · 0 评论 -
【Leetcode】874. Walking Robot Simulation
题目地址:https://leetcode.com/problems/walking-robot-simulation/给定一个二维网格,有个机器人从(0,0)(0,0)(0,0)出发,再给定一系列命令,以整数表示−1-1−1表示向右转,−2-2−2表示向左转,其余的命令都是[1,9][1,9][1,9]表示向前走若干步。再给定一系列障碍物的坐标,机器人走的路上如果有障碍物,则会停在障碍物之前。一开始机器人是向上走的。问命令执行完之前机器人距离原点的欧几里得距离的平方的最大值。先用一个类表示坐标,然后原创 2020-06-15 08:49:01 · 261 阅读 · 1 评论 -
【Leetcode】271. Encode and Decode Strings
要求设计一个编码和解码器,编码器输入是字符串数组,输出是一个字符串,而解码器反之。这两个器满足先编码后解码则不变,先解码后编码也不变。对于一个字符串数组,可以这样编码,将每个字符串里的特殊符号。解码的时候反过来操作即可。编码和解码时空复杂度都是输入所含的字符个数。原创 2023-01-08 07:10:23 · 581 阅读 · 0 评论 -
【Leetcode】2355. Maximum Number of Books You Can Take
结尾的和最大的严格递增数列的总和。,求所有满足这样条件的数列的最大总和。的时候延伸不动了);肯定更满足,从而可以将其下标pop掉。这可以用单调栈来做,因为如果。可以一路延续到左边直到值变成。的时候,最大和可以累加上。,可以构造一个下标从。开始的严格递增的数列。(因为这个最大的尽量。原创 2023-01-07 06:00:43 · 434 阅读 · 0 评论 -
【Leetcode】1759. Count Number of Homogenous Substrings
求其所有只含同一个字母的子串的数量。相等的子串位置不同则视为不同。的每一段相同字母的最长子串,再求个和即可。只含同一个字母,那么其子串数量为。原创 2023-01-06 16:53:25 · 141 阅读 · 0 评论 -
【Leetcode】2281. Sum of Total Strength of Wizards
,这两个数的位置可以用单调栈得出。,我们求出其右边第一个比其小的数。)和左边第一个比其小于等于的数。的子数组的和的总和。原创 2023-01-06 06:48:07 · 249 阅读 · 0 评论 -
【Leetcode】1923. Longest Common Subpath
然后用Rolling Hash的方法判断是否存在长度为。求这些数组的最长公共子数组。可以二分 + 哈希。原创 2023-01-04 07:06:26 · 206 阅读 · 0 评论 -
【Leetcode】1003. Check If Word Is Valid After Substitutions
问是否能从空串出发,每次在任一位置插入。子串,最后看是否能变空。考虑最后一步,最后一步一定是插入。,所以我们只需要倒过来做,让。原创 2023-01-03 02:55:21 · 176 阅读 · 0 评论 -
【Leetcode】2408. Design SQL
的哈希表来存储,key存的是行id,value存的是那一行具体的值。再用一个哈希表记录一下每张表继续插入的时候新行的id。,在名字为name的表的id为rowId的那一行里找到下标为columnId的项的值。的含义是每个表的每个列的列编号。题目保证数据库的每个表的列的个数相等;,在名字为name的表里插入新的一行。每个表的第一个插入的行的id为。,以后每插入一行,id递增。,在名字为name的表里删去id为rowId的那一行;为name的长度),空间取决于插入了多少数据。的含义是每个表的表名,原创 2023-01-02 08:29:34 · 335 阅读 · 0 评论 -
【Leetcode】959. Regions Cut By Slashes
这个格子里的划线,划线有两种,一种是从左上到右下;另一种是从右上到左下;当然也可以没有划线。问这个网格被分成了多少个连通块。的网格,给出一个字符串数组。原创 2023-01-02 03:08:59 · 204 阅读 · 0 评论 -
【Leetcode】816. Ambiguous Coordinates
的字符串,num是某个数字组成的字符串,其表示一个二维坐标,例如。,即中间可能有逗号,然后逗号两边的数字可能插入小数点。首先枚举逗号位置,再枚举逗号前后的子串的小数点位置,排除掉开头。,也不允许形如这样的。原创 2022-12-31 03:06:10 · 129 阅读 · 0 评论 -
【Leetcode】795. Number of Subarrays with Bounded Maximum
开一个严格单调下降的栈,在pop的时候,就能得到pop出的元素的右边最近的比它大的值的下标,和左边最近的不小于它的下标,这样能求出以其为最大值的子数组的个数。,问最大值位于这个范围的子数组的个数。原创 2022-12-30 14:51:53 · 168 阅读 · 0 评论 -
【Leetcode】893. Groups of Special-Equivalent Strings
将单词映射为:其偶数下标子序列排序得的子串拼接空格,再拼接其奇数下标子序列排序所得的子串。那么同一个等价类的串会映射到同一个串,然后用哈希表统计即可。,每一步允许交换奇数下标的两个字符或者偶数下标的两个位置,如果。,定义一个等价关系,两个字符串。原创 2022-12-15 04:34:23 · 148 阅读 · 0 评论 -
【Leetcode】581. Shortest Unsorted Continuous Subarray
一定是要排序的子数组的最右边的左边界(意思是其左边的数是完全不需要排序的),如果每个数的左边都没有比其大的数,那整个数组已经升序了,不需要排序;的右边最近的比其小的数。最后将两个端点之间的长度求出来即可。整个排成升序,得排序的子数组的最短长度是多少。这个子数组是一定要排序的,令这样的映射为。的一个子数组排序,问要将。的左边最近的比其大的数是。,那么我们可以求一下。原创 2022-12-14 04:45:23 · 275 阅读 · 0 评论