LeetCode
文章平均质量分 50
依嘫_吃代码
这个作者很懒,什么都没留下…
展开
-
leetcode 165. 比较版本号-java实现
模拟就可以了给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值。原创 2023-06-06 23:04:27 · 894 阅读 · 0 评论 -
leetcode 705. 设计哈希集合-java实现
华为校招不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现 MyHashSet 类:void add(key) 向哈希集合中插入值 key。bool contains(key) 返回哈希集合中是否存在这个值 key。void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。代码案例:输入:输出:解释:// 返回 True// 返回 False ,(未找到)// 返回 True。原创 2023-04-23 21:33:41 · 434 阅读 · 0 评论 -
leetcode 周赛 2386. 找出数组的第 K 大和-java实现
华为校招给你一个整数数组 nums 和一个 正 整数 k。你可以选择数组的任一 子序列 并且对其全部元素求和。数组的 第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复)返回数组的 第 k 大和。子序列是一个可以由其他数组删除某些或不删除元素排生而来的数组,且派生过程不改变剩余元素的顺序。注意:空子序列的和视作 0。代码案例:输入:nums = [2,4,-2], k = 5输出:2。原创 2023-04-23 15:18:37 · 450 阅读 · 0 评论 -
leetcode 1669. 合并两个链表-java实现
华为校招给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果:代码案例:输入:list1 = [0,1,2,3,4,5], a = 3, b = 4, list2 = [1000000,1000001,1000002]输出:[0,1,2,1000000,1000001,1000002,5]原创 2023-04-23 12:03:24 · 83 阅读 · 0 评论 -
leetcode 205. 同构字符串-java实现
华为校招给定两个字符串 s 和 t ,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。代码案例:输入:s = “egg”, t = “add”输出:true输入:s = “foo”, t = “bar”输出:false。原创 2023-04-22 23:56:21 · 181 阅读 · 0 评论 -
leetcode 130. 被围绕的区域-java题解
洪水灌溉算法 先找到处于边界不会被填充的O给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。代码案例:输入:board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“X”]]原创 2023-01-28 15:14:00 · 199 阅读 · 0 评论 -
leetcode 621. 任务调度器-java题解
贪心的做法 数组模拟哈希表给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间。原创 2023-01-27 22:33:33 · 184 阅读 · 0 评论 -
leetcode 581. 最短无序连续子数组-java题解
分类的话 算 双指针算法吧给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。代码案例:输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。原创 2023-01-27 16:55:22 · 125 阅读 · 0 评论 -
leetcode 560. 和为 K 的子数组-java题解
前缀和 哈希表给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数。代码案例:输入:nums = [1,1,1], k = 2输出:2。原创 2023-01-27 16:00:28 · 178 阅读 · 0 评论 -
leetcode 543. 二叉树的直径-java题解
二叉树给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。代码案例: 12 3/ \4 5返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。原创 2023-01-27 15:45:29 · 152 阅读 · 0 评论 -
leetcode 461. 汉明距离-java题解
位运算两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。代码案例:输入:x = 1, y = 4输出:2解释:↑ ↑上面的箭头指出了对应二进制位不同的位置。原创 2023-01-21 12:05:46 · 142 阅读 · 0 评论 -
leetcode 448. 找到所有数组中消失的数字-java题解
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。代码案例:输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]原创 2023-01-21 11:58:58 · 134 阅读 · 0 评论 -
leetcode 437. 路径总和 III-java题解
路径系列的第三题 路径系列的题解如下但是该题中对合法路径的要求是路径不需要从根节点开始,也不需要在叶子节点结束。所以我们可以枚举每个结点作为起点,同时在判断路径总和是否等于目标值时并不需要要求该点为叶子节点。给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。原创 2023-01-12 15:36:02 · 285 阅读 · 0 评论 -
leetcode 406. 根据身高重建队列-java题解
lamba表达式的自定义排序o1,o2中o1 - o2这样的默认是升序 也就是从小到大排序同时还要注意list.add(index,element)这种方法例子假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。原创 2023-01-12 14:34:31 · 413 阅读 · 0 评论 -
leetcode 399. 除法求值-java题解
flod最短路算法给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i]。每个 Ai 或 Bi 是一个表示单个变量的字符串。另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj =?的结果作为答案。返回 所有问题的答案。原创 2023-01-11 20:19:49 · 464 阅读 · 0 评论 -
leetcode 862. 和至少为 K 的最短子数组-java详细题解
重点:滑动窗口加优先队列这道题(面试常考)前缀和如果单调 就可以考虑双指针算法 但是这道题的前缀和并不单调,给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k 的 最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1。子数组 是数组中 连续 的一部分。原创 2023-01-10 23:02:17 · 128 阅读 · 0 评论 -
面试题 08.04. 幂集-java题解
dfs 也可以用二进制的写法 不用递归1原创 2023-01-10 19:52:46 · 150 阅读 · 0 评论 -
leeetcode 394. 字符串解码-java题解
类似一个dfs的思想 分为数字和字母给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。代码案例:输入:s = “3[a]2[bc]”原创 2023-01-10 12:51:32 · 125 阅读 · 0 评论 -
leetcode 347. 前 K 个高频元素-java题解
哈希 + 计数排序给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。代码案例:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]提示:k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。原创 2023-01-10 12:15:43 · 161 阅读 · 0 评论 -
leetcode 338. 比特位计数-java题解
给你一个整数 n ,对于 0 12 --> 10。原创 2023-01-10 11:57:07 · 174 阅读 · 2 评论 -
leetcode 312. 戳气球-java题解
类似区间DP有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。代码案例:输入:nums = [3,1,5,8]输出:167。原创 2023-01-10 11:31:23 · 187 阅读 · 0 评论 -
leetcode 301. 删除无效的括号-java题解
合法的括号序列需要满足的条件 这个是要记住的1)左右括号序列相同2)括号序列中任意一个前缀 左括号数量要大于等于右括号数量给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。返回所有可能的结果。答案可以按 任意顺序 返回。代码案例:输入:s = “()())()”输出:[“(())()”,“()()()”]原创 2023-01-06 19:34:20 · 387 阅读 · 0 评论 -
leetcode 297. 二叉树的序列化与反序列化-java题解
二叉树的序列化和反序列化的模拟题序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示: 输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。原创 2023-01-05 09:35:57 · 108 阅读 · 0 评论 -
leetcode 287. 寻找重复数-java题解
由环的入口对这道题进行转换 直接就找到环的入口做法有多种还可以二分给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。代码案例:输入:nums = [1,3,4,2,2]输出:2。原创 2023-01-04 10:50:04 · 139 阅读 · 0 评论 -
leetcode 283. 移动零-java题解
反证思维给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。代码案例:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]原创 2023-01-04 10:14:33 · 123 阅读 · 0 评论 -
leetcode 240. 搜索二维矩阵 II-java题解
从右上角出发往下遍历 倒是也可以二分编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。代码案例:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true。原创 2023-01-04 09:59:28 · 318 阅读 · 0 评论 -
leetcode 238. 除自身以外数组的乘积-java题解
前缀积和后缀积给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。代码案例:输入: nums = [1,2,3,4]输出: [24,12,8,6]原创 2023-01-04 08:55:09 · 127 阅读 · 0 评论 -
leetcode 221. 最大正方形-java题解
动态规划 前面写过一个面积最大的长方形f[i, j]表示:所有以(i,j)为右下角的且只包含 1`` 的正方形的边长最大值在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。代码案例:输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:4。原创 2023-01-03 21:51:02 · 293 阅读 · 0 评论 -
leetcode 215. 数组中的第K个最大元素-java题解
快速选择算法快选是基于快排给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。代码案例:输入: [3,2,1,5,6,4], k = 2输出: 5。原创 2023-01-02 11:32:20 · 147 阅读 · 0 评论 -
leetcode 208. 实现 Trie (前缀树)——java题解
前缀树 字典序 字典树Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false。原创 2023-01-02 10:51:32 · 159 阅读 · 0 评论 -
leetcode 207. 课程表——java题解
类似有向图的拓扑排序入度为0就是起点因为是要按照先后顺序的,所以是就是有向图你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1。在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。请你判断是否可能完成所有课程的学习?原创 2023-01-02 10:06:59 · 302 阅读 · 0 评论 -
leetcode 200. 岛屿数量——java题解
flood fill 算法dfs算法经典给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。代码案例:输入:grid = []输出:1。原创 2023-01-01 13:29:39 · 96 阅读 · 0 评论 -
leetcode 169. 多数元素-java题解
超经典问题 可以选用投票法给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。代码案例:输入:nums = [3,2,3]输出:3。原创 2023-01-01 12:32:58 · 685 阅读 · 0 评论 -
leetcode 160. 相交链表——java题解
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null。intersectVal - 相交的起始节点的值。skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数。skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数。原创 2022-12-31 23:20:38 · 622 阅读 · 0 评论 -
leetcode 155. 最小栈-java题解
辅助栈 或者一个栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。代码案例:输入:输出:解释:--> 返回 -3.--> 返回 0.原创 2022-12-31 23:16:18 · 584 阅读 · 0 评论 -
leetcode 152. 乘积最大子数组-java题解
给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。子数组 是数组的连续子序列。代码案例:输入: nums = [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。原创 2022-12-31 22:55:52 · 229 阅读 · 2 评论 -
leetcode 148. 排序链表-java题解
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。代码案例:输入:head = [4,2,1,3]输出:[1,2,3,4]原创 2022-12-31 22:46:29 · 220 阅读 · 0 评论 -
leetcode 125. 验证回文串-java题解
双指针算法如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true;否则,返回 false。代码案例:输入: s = “A man, a plan, a canal: Panama”输出:true解释:“amanaplanacanalpanama” 是回文串。原创 2022-12-28 20:03:43 · 212 阅读 · 0 评论 -
leetcode 124. 二叉树中的最大路径和-java题解
二叉树的最大值 dfs路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和。代码案例:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。原创 2022-12-26 22:00:21 · 467 阅读 · 0 评论 -
leetcode 121-123 买卖股票的最佳时机系列
都属于股票交易。原创 2022-11-06 18:27:39 · 160 阅读 · 0 评论