LeetCode--difficult
文章平均质量分 57
困难的题
韩师学子--小倪
不要告诉别人你的计划,只需要让别人知道结果就行了。
展开
-
2719. 统计整数数目
总共有 11 个整数的数位和在 1 到 8 之间,分别是 1,2,3,4,5,6,7,8,10,11 和 12。所以我们返回 11。数位和在 1 到 5 之间的 5 个整数分别为 1,2,3,4 和 5。所以我们返回 5。请你返回好整数的数目。答案可能很大,请返回答案对。原创 2024-01-15 13:06:59 · 387 阅读 · 0 评论 -
1944. 队列中可以看到的人数
他右边另一个人的条件是这两人之间的所有人都比他们两人。第 0 个人能看到编号为 1 ,2 和 4 的人。第 2 个人能看到编号为 3 和 4 的人。第 5 个人谁也看不到因为他右边没人。第 1 个人能看到编号为 2 的人。第 3 个人能看到编号为 4 的人。第 4 个人能看到编号为 5 的人。个人在他右侧队列中能。原创 2024-01-05 13:07:09 · 410 阅读 · 0 评论 -
460. LFU 缓存
/ 去除键 1 ,1 和 3 的 cnt 相同,但 1 最久未使用。// 去除键 2 ,因为 cnt(2)=1 ,使用计数最小。// cache=[] 将显示最后一次使用的顺序(最左边的元素是最近的)// 返回 -1(未找到)lfu.get(1);// 返回 -1(未找到)为了确定最不常使用的键,可以为缓存中的每个键维护一个。lfu.get(1);lfu.get(3);lfu.get(3);// cnt(x) = 键 x 的使用计数。使用计数最小的键是最久未使用的键。原创 2023-09-27 12:58:17 · 733 阅读 · 0 评论 -
1782. 统计点对的数目
有n个结点,m条边构成的无向图,问C(n, 2)的所有组合里有多少组合满足题设条件:对于组合(a, b),与a和b相连的边的数量大于queryNum(同一条边不重复计算)。所有的点对(a, b)中除了(3,4)边数等于3,其它点对边数和都大于3,故有5个。所有的点对(a, b)中边数和都大于2,故有6个;同时给你一个代表查询的整数数组。每个点对中,与至少一个点相连的边的数目如上图所示。个查询的答案是满足如下条件的点对。给你一个无向图,无向图由整数。,表示图中节点的数目,和。请注意,图中可能会有。原创 2023-08-23 13:29:05 · 588 阅读 · 0 评论 -
1388. 3n 块披萨
我们可以发现,环状序列相较于普通序列,相当于添加了一个限制:普通序列中的第一个和最后一个数不能同时选。选择大小为 4 的披萨,Alice 和 Bob 分别挑选大小为 3 和 5 的披萨。然后你选择大小为 6 的披萨,Alice 和 Bob 分别挑选大小为 2 和 1 的披萨。两轮都选大小为 8 的披萨。如果你选择大小为 9 的披萨,你的朋友们就会选择大小为 8 的披萨,这种情况下你的总和不是最大的。给一个长度为 3n的环状序列,你可以在其中选择 n 个数,并且任意两个数不能相邻,求这 n 个数的最大值。原创 2023-08-21 09:11:16 · 54 阅读 · 0 评论 -
5992. 基于陈述统计最多好人数
游戏中存在两种角色:好人:该角色只说真话。 坏人:该角色可能说真话,也可能说假话。给你一个下标从0开始的二维整数数组statements,大小为n x n,表示n个玩家对彼此角色的陈述。具体来说,statements[i][j]可以是下述值之一:0表示i的陈述认为j是坏人。 1表示i的陈述认为j是好人。 2表示i没有对j作出陈述。另外,玩家不会对自己进行陈述。形式上,对所有0 <= i < n,都有stateme...原创 2022-01-23 14:39:42 · 501 阅读 · 0 评论 -
5941. 找出知晓秘密的所有专家
给你一个整数n,表示有n个专家从0到n - 1编号。另外给你一个下标从 0 开始的二维整数数组meetings,其中meetings[i] = [xi, yi, timei]表示专家xi和专家yi在时间timei要开一场会。一个专家可以同时参加多场会议。最后,给你一个整数firstPerson。专家0有一个秘密,最初,他在时间0将这个秘密分享给了专家firstPerson。接着,这个秘密会在每次有知晓这个秘密的专家参加会议时进行传播。更正式...原创 2021-11-28 14:00:29 · 278 阅读 · 0 评论 -
2076. 处理含限制条件的好友请求
给你一个整数n,表示网络上的用户数目。每个用户按从0到n - 1进行编号。给你一个下标从0开始的二维整数数组restrictions,其中restrictions[i] = [xi, yi]意味着用户xi和用户yi不能成为朋友,不管是直接还是通过其他用户间接。最初,用户里没有人是其他用户的朋友。给你一个下标从0开始的二维整数数组requests表示好友请求的列表,其中requests[j] = [uj, vj]是用户uj和用户vj...原创 2021-11-21 15:53:37 · 84 阅读 · 0 评论 -
273. 整数转换英文表示
将非负整数num转换为其对应的英文表示。示例 1:输入:num = 123输出:"One Hundred Twenty Three"示例 2:输入:num = 12345输出:"Twelve Thousand Three Hundred Forty Five"示例 3:输入:num = 1234567输出:"One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"示例 4...原创 2021-10-11 22:20:53 · 212 阅读 · 0 评论 -
352. 将数据流变为多个不相交区间
给你一个由非负整数a1, a2, ..., an组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。实现SummaryRanges类:SummaryRanges()使用一个空数据流初始化对象。 void addNum(int val)向数据流中加入整数val。 int[][] getIntervals()以不相交区间[starti, endi]的列表形式返回对数据流中整数的总结。示例:输入:["SummaryRanges", "addNum",...原创 2021-10-09 23:28:41 · 84 阅读 · 0 评论 -
517. 超级洗衣机
假设有n台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意m(1 <= m <= n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。给定一个整数数组machines代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的最少的操作步数。如果不能使每台洗衣机中衣物的数量相等,则返回-1。示例 1:输入:machines = [1,0,5]输出:3...原创 2021-09-29 23:11:37 · 79 阅读 · 0 评论 -
639. 解码方法 II
一条包含字母A-Z的消息通过以下的方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26要解码一条已编码的消息,所有的数字都必须分组,然后按原来的编码方案反向映射回字母(可能存在多种方式)。例如,"11106"可以映射为:"AAJF"对应分组(1 1 10 6) "KJF"对应分组(11 10 6)注意,像(1 11 06)这样的分组是无效的,因为"06"不可以映射为'F',因为"6"与"06"不同。...原创 2021-09-27 23:06:27 · 235 阅读 · 0 评论 -
212. 单词搜索 II
给定一个m x n二维字符网格board和一个单词(字符串)列表words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例 1:输入:board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = [...原创 2021-09-16 23:55:55 · 138 阅读 · 0 评论 -
600. 不含连续1的非负整数
给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含连续的1的个数。示例 1:输入: 5输出: 5解释: 下面是带有相应二进制表示的非负整数<= 5:0 : 01 : 12 : 103 : 114 : 1005 : 101其中,只有整数3违反规则(有两个连续的1),其他5个满足规则。说明:1 <= n <= 109题解:遍历的代价太大了,而且反正要求的是二进制不连续的1;那就用dfs从1开始,按位增。如果当前结尾是1...原创 2021-09-11 10:40:10 · 78 阅读 · 0 评论 -
68. 文本左右对齐
给定一个单词数组和一个长度maxWidth,重新排版单词,使其成为每行恰好有maxWidth个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格' '填充,使得每行恰好有maxWidth个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。文本的最后一行应为左对齐,且单词之间不插入额外的空格。说明:单词是指由非空格字符组成的字符序列。 每个...原创 2021-09-09 21:40:13 · 185 阅读 · 0 评论 -
502. IPO
假设 力扣(LeetCode)即将开始IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多k个不同的项目。帮助 力扣 设计完成最多k个不同项目后得到最大总资本的方式。给你n个项目。对于每个项目i,它都有一个纯利润profits[i],和启动该项目需要的最小资本capital[i]。最初,你的资本为w。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。总而言...原创 2021-09-08 23:17:30 · 84 阅读 · 0 评论 -
295. 数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5addNum(3) find.原创 2021-08-27 23:03:16 · 87 阅读 · 0 评论 -
552. 学生出勤记录 II
可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:'A':Absent,缺勤 'L':Late,迟到 'P':Present,到场如果学生能够同时满足下面两个条件,则可以获得出勤奖励:按总出勤计,学生缺勤('A')严格少于两天。 学生不会存在连续3 天或连续3 天以上的迟到('L')记录。给你一个整数n,表示出勤记录的长度(次数)。请你返回记录长度为n时,可能获得出勤奖励的记录情况数量。答...原创 2021-08-18 22:17:12 · 121 阅读 · 0 评论 -
233. 数字 1 的个数
给定一个整数n,计算所有小于等于n的非负整数中数字1出现的个数。示例 1:输入:n = 13输出:6示例 2:输入:n = 0输出:0提示:0 <= n <= 2 * 109题解:枚举每一数位上11的个数code:class Solution { public int countDigitOne(int n) { // mulk 表示 10^k // 在下面的代码中,可以发现 k 并...原创 2021-08-13 13:22:25 · 122 阅读 · 0 评论 -
446. 等差数列划分 II - 子序列
给你一个整数数组nums,返回nums中所有等差子序列的数目。如果一个序列中至少有三个元素,并且任意两个相邻元素之差相同,则称该序列为等差序列。例如,[1, 3, 5, 7, 9]、[7, 7, 7, 7]和[3, -1, -5, -9]都是等差序列。 再例如,[1, 1, 2, 5, 7]不是等差序列。数组中的子序列是从数组中删除一些元素(也可能不删除)得到的一个序列。例如,[2,5,10]是[1,2,1,2,4,1,5,10]的一个子序列。题目数据保证答案...原创 2021-08-11 13:35:47 · 276 阅读 · 0 评论 -
5841. 找出到每个位置为止最长的有效障碍赛跑路线
你打算构建一些障碍赛跑路线。给你一个下标从 0 开始的整数数组obstacles,数组长度为n,其中obstacles[i]表示第i个障碍的高度。对于每个介于0和n - 1之间(包含0和n - 1)的下标i,在满足下述条件的前提下,请你找出obstacles能构成的最长障碍路线的长度:你可以选择下标介于0到i之间(包含0和i)的任意个障碍。 在这条路线中,必须包含第i个障碍。 你必须按障碍在obstacles中的出现顺序布置这...原创 2021-08-08 15:25:35 · 109 阅读 · 0 评论 -
457. 环形数组是否存在循环
存在一个不含0的环形数组nums,每个nums[i]都表示位于下标i的角色应该向前或向后移动的下标个数:如果nums[i]是正数,向前移动nums[i]步 如果nums[i]是负数,向后移动nums[i]步因为数组是环形的,所以可以假设从最后一个元素向前移动一步会到达第一个元素,而第一个元素向后移动一步会到达最后一个元素。数组中的循环由长度为k的下标序列seq:遵循上述移动规则将导致重复下标序列seq[0] -> seq[1] ...原创 2021-08-07 20:25:53 · 145 阅读 · 0 评论 -
847. 访问所有节点的最短路径
存在一个由n个节点组成的无向连通图,图中的节点按从0到n - 1编号。给你一个数组graph表示这个图。其中,graph[i]是一个列表,由所有与节点i直接相连的节点组成。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边。示例 1:输入:graph = [[1,2,3],[0],[0],[0]]输出:4解释:一种可能的路径为 [1,0,2,0,3]示例 2:输入:graph = [[1],[...原创 2021-08-06 13:12:31 · 356 阅读 · 0 评论 -
987. 二叉树的垂序遍历
给你二叉树的根结点root,请你设计算法计算二叉树的垂序遍历序列。对位于(row, col)的每个结点而言,其左右子结点分别位于(row + 1, col - 1)和(row + 1, col + 1)。树的根结点位于(0, 0)。二叉树的垂序遍历从最左边的列开始直到最右边的列结束,按列索引每一列上的所有结点,形成一个按出现位置从上到下排序的有序列表。如果同行同列上有多个结点,则按结点的值从小到大进行排序。返回二叉树的垂序遍历序列。示例 1:输入...原创 2021-07-31 08:21:00 · 148 阅读 · 0 评论 -
218. 天际线问题
城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回由这些建筑物形成的 天际线 。每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] = [lefti, righti, heighti] 表示:lefti 是第 i 座建筑物左边缘的 x 坐标。righti 是第 i 座建筑物右边缘的 x 坐标。heighti 是第 i 座建筑物的高度。天际线 应该表示为由 “关键点” 组成的列表,格式 [[x1,y1],[x2,原创 2021-07-13 13:42:01 · 167 阅读 · 0 评论 -
726. 原子的数量
给定一个化学式formula(作为字符串),返回每种原子的数量。原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行的。两个化学式连在一起是新的化学式。例如 H2O2He3Mg4 也是化学式。一个括号中的化学式和数字(可选择性添加)也是化学式。例如 (H2O2) 和 (H2O2)3 是化学式。给定一个化学式,输出所有原子的数量。原创 2021-07-05 13:39:15 · 131 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。示例:输入:root = [1,2,3,null,null,4,5]输出:[1,2,3,null,n原创 2021-06-30 13:17:14 · 66 阅读 · 0 评论 -
815. 公交路线
给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。例如,路线 routes[0] = [1, 5, 7] 表示第 0 辆公交车会一直按序列 1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> … 这样的车站路线行驶。现在从 source 车站出发(初始时不在公交车上),要前往 target 车站。 期间仅可乘坐公交车。求出 最少乘坐的公交车数量 。如果不可能到原创 2021-06-28 13:22:17 · 118 阅读 · 0 评论 -
773. 滑动谜题
在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字1~5来表示, 以及一块空缺用0来表示.一次移动定义为选择0与一个相邻的数字(上下左右)进行交换.最终当板board的结果是[[1,2,3],[4,5,0]]谜板被解开。给出一个谜板的初始状态,返回最少可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。示例:输入:board = [[1,2,3],[4,0,5]]输出:1解释:交换 0 和 5 ,1 步完成输入:board = [[...原创 2021-06-26 17:27:05 · 145 阅读 · 0 评论 -
149. 直线上最多的点数
给你一个数组points,其中points[i] = [xi, yi]表示X-Y平面上的一个点。求最多有多少个点在同一条直线上。示例 1:输入:points = [[1,1],[2,2],[3,3]]输出:3示例 2:输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]输出:4提示:1 <= points.length <= 300 points[i].length == 2 -10...原创 2021-06-24 13:06:48 · 64 阅读 · 0 评论 -
1074. 元素和为目标值的子矩阵数量
给出矩阵matrix和目标值target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵x1, y1, x2, y2是满足x1 <= x <= x2且y1 <= y <= y2的所有单元matrix[x][y]的集合。如果(x1, y1, x2, y2)和(x1', y1', x2', y2')两个子矩阵中部分坐标不同(如:x1 != x1'),那么这两个子矩阵也不同。示例 1:输入:matrix = [[0,1,0],[1,1,...原创 2021-05-29 22:05:16 · 124 阅读 · 0 评论 -
239. 滑动窗口最大值
给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 ...原创 2021-01-23 14:50:15 · 74 阅读 · 0 评论 -
42. 接雨水
给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length 0 &...转载 2021-01-20 13:07:28 · 154 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 "[1,2,3,nul.原创 2021-01-19 13:25:09 · 82 阅读 · 1 评论 -
301. 删除无效的括号
删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明:输入可能包含了除(和)以外的字符。示例 1:输入: "()())()"输出: ["()()()", "(())()"]示例 2:输入: "(a)())()"输出: ["(a)()()", "(a())()"]示例 3:输入: ")("输出: [""]代码实现:...原创 2021-01-19 09:12:25 · 94 阅读 · 0 评论 -
76. 最小覆盖子串
给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。注意:如果s中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"示例 2:输入:s = "a", t = "a"输出:"a"提示:1 <= s.length, t.length <= 105 s和t由英...原创 2021-01-16 11:23:01 · 221 阅读 · 0 评论 -
32. 最长有效括号
32. 最长有效括号给定一个只包含 '('和 ')'的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"code:...原创 2021-01-02 22:25:21 · 111 阅读 · 0 评论 -
128. 最长连续序列
给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。进阶:你可以设计并实现时间复杂度为O(n)的解决方案吗?示例 1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9提示:0 <= nums.length <= 104 -10...原创 2021-01-02 21:14:50 · 359 阅读 · 0 评论 -
84. 柱状图中最大的矩形
给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。示例:输入: [2,1,5,6,2,3]输出: 10思路分析我们可以遍历每根柱子,以当前柱子 i 的高度作为矩形的高,那么矩形的宽度边界即为向左找到第一个高度小于当前柱...原创 2021-01-01 23:25:48 · 147 阅读 · 0 评论 -
85. 最大矩形
给定一个仅包含0和1、大小为rows x cols的二维二进制矩阵,找出只包含1的最大矩形,并返回其面积。示例 1:输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]输出:6解释:最大矩形如上图所示。示例 2:输入:matrix = []输出:0示例 3:输入:matrix = [["0"]]输出...原创 2021-01-01 23:44:16 · 143 阅读 · 0 评论