算法
边界流浪者
三流程序员,边界流浪者,大叔
展开
-
LeetCode-110. 平衡二叉树
输入:root = [1,2,2,3,3,null,null,4,4]输入:root = [3,9,20,null,null,15,7]一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。给定一个二叉树,判断它是否是高度平衡的二叉树。树中的节点数在范围 [0, 5000] 内。输入:root = []...原创 2022-08-26 11:04:26 · 482 阅读 · 1 评论 -
LeetCode-350. 两个数组的交集 II
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输入:nums1 = [1,2,2,1], nums2 = [2,2]如果 nums1 的大小比 nums2 小,哪种方法更优?...原创 2022-08-11 18:39:47 · 381 阅读 · 0 评论 -
LeetCode-636. 函数的独占时间
输入:n = 1, logs = ["0:start:0","0:start:2","0:end:5","0:start:6","0:end:6","0:end:7"]输入:n = 2, logs = ["0:start:0","0:start:2","0:end:5","1:start:6","1:end:6","0:end:7"]输入:n = 2, logs = ["0:start:0","0:start:2","0:end:5","1:start:7","1:end:7","0:end:8"]...原创 2022-08-07 22:55:37 · 347 阅读 · 0 评论 -
LeetCode-142. 环形链表 II
如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。给定一个链表的头节点head,返回链表开始入环的第一个节点。输入head=[3,2,0,-4],pos=1。输入head=[1,2],pos=0。解释链表中有一个环,其尾部连接到第二个节点。解释链表中有一个环,其尾部连接到第一个节点。输出返回索引为1的链表节点。解释链表中没有环。...原创 2022-08-01 22:59:11 · 78 阅读 · 0 评论 -
LeetCode-729. 我的日程安排表 I
实现一个 MyCalendar 类来存放你的日程安排。如果要添加的日程安排不会造成 重复预订 ,则可以存储这个新的日程安排。当两个日程安排有一些时间上的交叉时(例如两个日程安排都在同一时间内),就会产生 重复预订 。日程可以用一对整数 start 和 end 表示,这里的时间是半开区间,即 [start, end), 实数 x 的范围为, start ...原创 2022-07-09 12:13:32 · 159 阅读 · 0 评论 -
LeetCode-513. 找树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7 提示:二叉树的节点个数的范围是 [1,104]-231 ...原创 2022-06-22 21:03:49 · 130 阅读 · 0 评论 -
LeetCode-1241. 每个帖子的评论数
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入...原创 2022-06-07 22:32:54 · 126 阅读 · 0 评论 -
LeetCode-388. 文件的最长绝对路径
假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个示例:这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,该子目录下包含文件 file2.ext 。在文本格式中,如下所示(⟶表示制表符):dir⟶ subdir1⟶ ⟶ file1.ext⟶ ⟶ subsubdir1⟶ subdir2⟶ ⟶原创 2022-04-23 12:00:13 · 122 阅读 · 0 评论 -
LeetCode-146. LRU 缓存
请你设计并实现一个满足LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value)如果关键字key 已经存在,则变更其数据值value ;如果不存在,则向缓存中插入该组key-value 。如果插入操作导致关键...原创 2022-03-01 23:31:11 · 257 阅读 · 0 评论 -
LeetCode-1405. 最长快乐字符串
如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:s 是一个尽可能长的快乐字符串。s 中 最多 有a 个字母 'a'、b个字母 'b'、c 个字母 'c' 。s 中只含有 'a'、'b' 、'c' 三种字母。如果不存在这样的字符串 s ,请返回一个空字符串 ""。示例 1:输入:a = 1, b = 1, c = 7输出:"cca.原创 2022-02-07 22:22:25 · 215 阅读 · 0 评论 -
LeetCode-884. 两句话中的不常见单词
句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。示例 1:输入:s1 = "this apple is sweet", s2 = "this apple is sour"输出:["sweet","sour"]示例 2:输入:s1 = "apple apple", s原创 2022-01-30 23:28:59 · 562 阅读 · 0 评论 -
LeetCode-2034. 股票价格波动
给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳和该时间点股票对应的 价格。不巧的是,由于股票市场内在的波动性,股票价格记录可能不是按时间顺序到来的。某些情况下,有的记录可能是错的。如果两个有相同时间戳的记录出现在数据流中,前一条记录视为错误记录,后出现的记录 更正前一条错误的记录。请你设计一个算法,实现:更新 股票在某一时间戳的股票价格,如果有之前同一时间戳的价格,这一操作将更正之前的错误价格。找到当前记录里 最新股票价格。最新股票价格定义为时间戳最晚的股票价格。...原创 2022-01-23 22:29:17 · 140 阅读 · 0 评论 -
LeetCode-219. 存在重复元素 II
给你一个整数数组nums 和一个整数k ,判断数组中是否存在两个 不同的索引i和j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例1:输入:nums = [1,2,3,1], k = 3输出:true示例 2:输入:nums = [1,0,1,1], k = 1输出:true示例 3:输入:nums = [1,2,3,1,2,3], k = 2输出:false...原创 2022-01-20 00:02:32 · 426 阅读 · 0 评论 -
LeetCode-1716. 计算力扣银行的钱
Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。最开始,他在周一的时候存入 1块钱。从周二到周日,他每天都比前一天多存入 1块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1块钱。给你n,请你返回在第 n天结束的时候他在力扣银行总共存了多少块钱。示例 1:输入:n = 4输出:10解释:第 4 天后,总额为 1 + 2 + 3 + 4 = 10 。示例 2:输入:n = 10输出:37解释:第 10 天后,总额为 (1 + 2 + 3 ...原创 2022-01-15 14:07:11 · 167 阅读 · 0 评论 -
LeetCode-1629. 按键持续时间最长的键
LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。测试人员想要找出按键 持续时间最长原创 2022-01-09 22:42:49 · 87 阅读 · 0 评论 -
LeetCode-1185. 一周中的第几天
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。示例 1:输入:day = 31, month = 8, year = 2019输出:"Saturday"示例 2:输入:day = 18, month = 7..原创 2022-01-04 21:58:42 · 191 阅读 · 0 评论 -
LeetCode-1078. Bigram 分词
给出第一个词first 和第二个词second,考虑在某些文本text中可能以 "first second third" 形式出现的情况,其中second紧随first出现,third紧随second出现。对于每种这样的情况,将第三个词 "third" 添加到答案中,并返回答案。示例 1:输入:text = "alice is a good girl she is a good student", first = "a", second = "good"输出:["gi...原创 2021-12-27 00:49:46 · 390 阅读 · 0 评论 -
LeetCode-859. 亲密字符串
给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回true;否则返回 false 。交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。示例 1:输入:s = "ab", goal = "ba"输出:true解释:你可以交换 s[0] = 'a' 和 s[1] ...原创 2021-11-23 23:56:54 · 223 阅读 · 0 评论 -
LeetCode-384. 打乱数组
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果示例:输入["Solution", "shuffle", "reset", "shuffle"][[[1, 2, 3]], [], [], []]输出[null, [3, 1, 2], [.原创 2021-11-22 23:10:50 · 95 阅读 · 0 评论 -
LeetCode-496. 下一个更大元素 I
给你两个 没有重复元素 的数组nums1 和nums2,其中nums1是nums2的子集。请你找出 nums1中每个元素在nums2中的下一个比其大的值。nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于 num1 中的数字 4 ,你无法在第二...原创 2021-10-26 23:39:14 · 74 阅读 · 0 评论 -
LeetCode-638. 大礼包
在 LeetCode 商店中, 有 n 件在售的物品。每件物品都有对应的价格。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。给你一个整数数组 price 表示物品价格,其中 price[i] 是第 i 件物品的价格。另有一个整数数组 needs 表示购物清单,其中 needs[i] 是需要购买第 i 件物品的数量。还有一个数组 special 表示大礼包,special[i] 的长度为 n + 1 ,其中 special[i][j] 表示第 i 个大礼包中内含第 j 件物品的数量,且原创 2021-10-24 18:32:40 · 151 阅读 · 0 评论 -
LeetCode-492. 构造矩形
作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求:1. 你设计的矩形页面必须等于给定的目标面积。2. 宽度 W 不应大于长度 L,换言之,要求 L >= W 。3. 长度 L 和宽度 W 之间的差距应当尽可能小。你需要按顺序输出你设计的页面的长度 L 和宽度 W。示例:输入: 4输出: [2, 2]解释: 目标面积是 4, 所有可能的构造方案有 [1,4原创 2021-10-23 23:30:05 · 101 阅读 · 0 评论 -
LeetCode-230. 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第k个最小元素(从 1 开始计数)。示例 1:输入:root = [3,1,4,null,2], k = 1输出:1示例 2:输入:root = [5,3,6,2,4,null,null,1], k = 3输出:3提示:树中的节点数为 n 。1 <= k <= n <= 10的4次方0 <= Node.val <= 10的4次方...原创 2021-10-17 13:59:15 · 93 阅读 · 0 评论 -
LeetCode-38. 外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1描述前一项,这个数是 1 即...原创 2021-10-16 20:43:57 · 111 阅读 · 0 评论 -
LeetCode-352. 将数据流变为多个不相交区间
给你一个由非负整数a1, a2, ..., an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。实现 SummaryRanges 类:SummaryRanges() 使用一个空数据流初始化对象。void addNum(int val) 向数据流中加入整数 val 。int[][] getIntervals() 以不相交区间[starti, endi] 的列表形式返回对数据流中整数的总结。示例:输入:["SummaryRanges", "addNum", "...原创 2021-10-09 22:37:03 · 118 阅读 · 0 评论 -
LeetCode-187. 重复的DNA序列
所有 DNA 都由一系列缩写为 'A','C','G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。示例 1:输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出:["AAAAACCCCC","CCCCCAAAAA"]示例 2:输入:s = "AAAAAAAAAAAA原创 2021-10-08 20:58:46 · 99 阅读 · 0 评论 -
LeetCode-430. 扁平化多级双向链表
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例 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]解释:输入的多级列表如下图原创 2021-09-25 01:18:55 · 163 阅读 · 0 评论 -
LeetCode-165. 比较版本号
给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 00原创 2021-09-01 22:38:33 · 158 阅读 · 0 评论 -
LeetCode-576. 出界的路径数
给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你 最多 可以移动 maxMove 次球。给你五个整数 m、n、maxMove、startRow 以及 startColumn ,找出并返回可以将球移出边界的路径数量。因为答案可能非常大,返回对 109 + 7 取余 后的结果。示例 1:输入:m = 2, n = 2, maxMove = 2, s.原创 2021-08-15 23:29:50 · 129 阅读 · 0 评论 -
LeetCode-457. 环形数组是否存在循环
存在一个不含 0 的 环形 数组nums ,每个 nums[i] 都表示位于下标 i 的角色应该向前或向后移动的下标个数:如果 nums[i] 是正数,向前 移动 nums[i] 步如果nums[i] 是负数,向后 移动 nums[i] 步因为数组是 环形 的,所以可以假设从最后一个元素向前移动一步会到达第一个元素,而第一个元素向后移动一步会到达最后一个元素。数组中的 循环 由长度为 k 的下标序列 seq :遵循上述移动规则将导致重复下标序列 seq[0] -> seq[1] -..原创 2021-08-08 13:00:56 · 173 阅读 · 0 评论 -
LeetCode-1315. 祖父节点值为偶数的节点和
给你一棵二叉树,请你返回满足以下条件的所有节点的值之和:该节点的祖父节点的值为偶数。(一个节点的祖父节点是指该节点的父节点的父节点。)如果不存在祖父节点值为偶数的节点,那么返回0 。示例:输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]输出:18解释:图中红色节点的祖父节点的值为偶数,蓝色节点为这些红色节点的祖父节点。提示:树中节点的数目在1 到10^4之间。每个节点的值在1 到100 之间。...原创 2021-08-01 23:39:13 · 217 阅读 · 1 评论 -
LeetCode1337. 矩阵中战斗力最弱的 K 行
给你一个大小为m* n的矩阵mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。请你返回矩阵中战斗力最弱的k行的索引,按从最弱到最强排序。如果第i行的军人数量少于第j行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。示例 1:输入:mat =[[1,1,0,0,0],[1,1,1,1,0],[1,0,0,0,0],[1,1,0,0,0...原创 2021-08-01 11:36:36 · 109 阅读 · 0 评论 -
LeetCode-863. 二叉树中所有距离为 K 的结点
给定一个二叉树(具有根结点root),一个目标结点target,和一个整数值 K 。返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2输出:[7,4,1]解释:所求结点为与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,以及 1注意,输入的 "root" 和 "target" 实际上是树上的结点。...原创 2021-07-28 23:13:01 · 183 阅读 · 0 评论 -
LeetCode-1743. 从相邻元素对还原数组
存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能是 [原创 2021-07-26 01:05:15 · 118 阅读 · 0 评论 -
LeetCode-1008. 前序遍历构造二叉搜索树
返回与给定前序遍历preorder 相匹配的二叉搜索树(binary search tree)的根结点。(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于node.left的任何后代,值总 < node.val,而 node.right 的任何后代,值总 > node.val。此外,前序遍历首先显示节点node 的值,然后遍历 node.left,接着遍历 node.right。)题目保证,对于给定的测试用例,总能找到满足要求的二叉搜索树。示例:输入...原创 2021-07-25 20:46:57 · 136 阅读 · 0 评论 -
LeetCode-200. 岛屿数量
给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例 2:输入:grid = [...原创 2021-07-25 16:44:30 · 155 阅读 · 0 评论 -
LeetCode-662. 二叉树最大宽度
给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。示例 1:输入: 1 / \ 3 2 / \ \ 5 3 9输出: 4解释: 最大值出现在树的第 3 层...原创 2021-07-25 11:00:05 · 123 阅读 · 0 评论 -
LeetCode-148. 排序链表
给你链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]提示:链表中节点的数目在范围[0, 5 * 104]内-105<= Node.va...原创 2021-07-08 00:33:54 · 67 阅读 · 0 评论 -
LeetCode-739. 每日温度
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。这种题目,要有反射,一看就是利用单调栈...原创 2021-06-27 18:23:52 · 187 阅读 · 0 评论 -
LeetCode-64. 最小路径和
给定一个包含非负整数的 mxn网格grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12提示:m == grid.lengthn == grid[i].length1 <= m, n...原创 2021-06-27 18:17:34 · 68 阅读 · 0 评论