算法
文章平均质量分 73
其他
允诺@晴天
这个作者很懒,什么都没留下…
展开
-
牛客——二叉搜索树与双向链表
数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000。输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求:空间复杂度O(1)(即在原树上操作),时间复杂度 O(n)双向链表的其中一个头节点。原创 2022-10-28 17:49:29 · 2304 阅读 · 1 评论 -
LeetCode——532. 数组中的 k-diff 数对
给定一个整数数组和一个整数 k,你需要在数组里找到 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目。这里将 k-diff 数对定义为一个整数对 ,并满足下述全部条件:注意, 表示 的绝对值。示例 1:示例 2:示例 3:提示:官方答案方法一:哈希表思路遍历数组,找出符合条件的数对。因为是寻找不同的数对,所以可以将数对放入哈希表 res,完成去重的效果,最后返回哈希表的长度即可。遍历数组时,可以将遍历到的下标当作潜在的 j,判断 j 左侧是否有满足条件的 i 来构成 k-diff原创 2022-06-16 09:20:27 · 2316 阅读 · 0 评论 -
LeetCode——面试题 04.06. 后继者
面试题 04.06. 后继者题目描述答案我的答案官方答案中序遍历题目描述设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。示例 1:示例 2:答案我的答案/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right;原创 2022-05-16 16:14:32 · 2265 阅读 · 0 评论 -
LeetCode——面试题 01.05. 一次编辑
面试题 01.05. 一次编辑题目描述答案我的答案官方答案分情况讨论题目描述字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例 1:输入:first = “pale”second = “ple”输出: True示例 2:输入:first = “pales”second = “pal”输出: False答案我的答案class Solution { public boolean原创 2022-05-13 11:53:13 · 2299 阅读 · 0 评论 -
LeetCode——944. 删列造序
944. 删列造序题目描述答案我的答案官网答案直接遍历题目描述给你由 n 个小写字母字符串组成的数组 strs,其中每个字符串长度相等。这些字符串可以每个一行,排成一个网格。例如,strs = ["abc", "bce", "cae"] 可以排列为:abcbcecae你需要找出并删除 不是按字典序升序排列的 列。在上面的例子(下标从 0 开始)中,列 0('a', 'b', 'c')和列 2('c', 'e', 'e')都是按升序排列的,而列 1('b', 'c', 'a')不是,所以要删原创 2022-05-12 21:56:38 · 2251 阅读 · 0 评论 -
LeetCode——449. 序列化和反序列化二叉搜索树
449. 序列化和反序列化二叉搜索树题目描述答案我的答案官方答案后序遍历题目描述序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。编码的字符串应尽可能紧凑。示例 1:输入:root = [2,1,3]输出:[2,1,3]原创 2022-05-11 18:52:18 · 2305 阅读 · 0 评论 -
LeetCode——942. 增减字符串匹配
942. 增减字符串匹配题目描述答案我的答案官方答案方法一:贪心题目描述由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:如果 perm[i] < perm[i + 1] ,那么 s[i] == 'I' 如果 perm[i] > perm[i + 1] ,那么 s[i] == 'D'给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。示例 1:输入:s = “IDI原创 2022-05-09 14:01:04 · 2252 阅读 · 0 评论 -
LeetCode——442. 数组中重复的数据
442. 数组中重复的数据题目描述答案我的答案官方答案方法一:将元素交换到对应的位置方法二:使用正负号作为标记题目描述给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[2,3]示例 2:输入:nums =原创 2022-05-08 17:01:58 · 2849 阅读 · 0 评论 -
LeetCode——933. 最近的请求次数
933. 最近的请求次数题目描述答案我的答案官网答案队列题目描述写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前原创 2022-05-06 23:26:51 · 2275 阅读 · 0 评论 -
LeetCode——1823. 找出游戏的获胜者
1823. 找出游戏的获胜者答案我的答案官网答案方法一:模拟 + 队列方法二:数学 + 迭代共有 n 名小伙伴一起做游戏。小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号。确切地说,从第 i 名小伙伴顺时针移动一位会到达第 (i+1) 名小伙伴的位置,其中 1 <= i < n ,从第 n 名小伙伴顺时针移动一位会回到第 1 名小伙伴的位置。游戏遵循如下规则:从第 1 名小伙伴所在位置 开始 。沿着顺时针方向数 k 名小伙伴,计数时需要 包含 起始时的那位小伙伴。逐个绕圈进行计数,原创 2022-05-04 23:49:12 · 2194 阅读 · 0 评论 -
LeetCode——937. 重新排列日志文件
937. 重新排列日志文件答案我的答案官网答案自定义排序给你一个日志数组 logs。每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 。有两种不同类型的日志:字母日志:除标识符之外,所有字均由小写字母组成数字日志:除标识符之外,所有字均由数字组成请按下述规则将日志重新排序:所有 字母日志 都排在 数字日志 之前。字母日志 在内容不同时,忽略标识符后,按内容字母顺序排序;在内容相同时,按标识符排序。数字日志 应该保留原来的相对顺序。返回日志的最终顺序。示例 1:原创 2022-05-04 00:07:52 · 2261 阅读 · 0 评论 -
LeetCode——1305. 两棵二叉搜索树中的所有元素
1305. 两棵二叉搜索树中的所有元素题目描述答案我的答案官方答案中序遍历 + 归并题目描述给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.示例 1:输入:root1 = [2,1,4], root2 = [1,0,3]输出:[0,1,1,2,3,4]示例 2:输入:root1 = [1,null,8], root2 = [8,1]输出:[1,1,8,8]提示:每棵树的节点数在 [0, 5000] 范围内-1原创 2022-05-01 23:29:49 · 2380 阅读 · 0 评论 -
LeetCode——908. 最小差值 I
908. 最小差值 I题目描述答案我的答案官方答案数学思路与算法代码复杂度分析题目描述给你一个整数数组 nums,和一个整数 k 。在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i ,最多 只能 应用 一次 此操作。nums 的 分数 是 nums 中最大和最小元素的差值。在对 nums 中的每个索引最多应用一次上述操作后,返回 n原创 2022-04-30 17:29:36 · 2297 阅读 · 0 评论 -
LeetCode——427. 建立四叉树
427. 建立四叉树题目描述答案方法一:递归思路与算法代码方法二:递归 + 二维前缀和优化思路与算法代码复杂度分析题目描述给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。你需要返回能表示矩阵的 四叉树 的根结点。注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受 。四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:val:储存叶子结点所代表的区原创 2022-04-29 20:08:31 · 2356 阅读 · 0 评论 -
LeetCode——905. 按奇偶排序数组
905. 按奇偶排序数组题目描述答案我的答案官方答案方法一:两次遍历方法二:双指针 + 一次遍历方法三:原地交换题目描述给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。示例 1:输入:nums = [3,1,2,4]输出:[2,4,3,1]解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。示例 2:输入:nums = [0]输出:[0]提示:1 &l原创 2022-04-28 11:09:04 · 2264 阅读 · 0 评论 -
LeetCode——417. 太平洋大西洋水流问题
417. 太平洋大西洋水流问题题目描述答案方法一:深度优先搜索方法二:广度优先搜索题目描述有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度 。岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、原创 2022-04-27 17:45:09 · 2401 阅读 · 0 评论 -
LeetCode——883. 三维形体投影面积
文章目录题目描述答案我的答案官方答案数学题目描述在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。返回 所有三个投影的总面积 。示例 1:输入:[[1,2],[3,4]]输原创 2022-04-26 23:36:44 · 2252 阅读 · 0 评论 -
LeetCode——398. 随机数索引
398. 随机数索引题目描述答案我的代码官网答案方法一:哈希表方法二:水塘抽样题目描述给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给定的数字一定存在于数组中。实现 Solution 类:Solution(int[] nums) 用数组 nums 初始化对象。int pick(int target) 从 nums 中选出一个满足 nums[i] == target 的随机索引 i 。如果存在多个有效的索引,则每个索引的返回概率应当原创 2022-04-25 20:02:16 · 2383 阅读 · 0 评论 -
LeetCode——868. 二进制间距
868. 二进制间距题目描述答案我的代码官方答案位运算题目描述给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。示例 1:输入:n = 22输出:2解释:22 的二进制是 “10110” 。 在 22 的二进制表示中,有三个 1,组原创 2022-04-24 11:37:13 · 3127 阅读 · 0 评论 -
LeetCode——396. 旋转函数
396. 旋转函数题目描述答案我的代码1、暴力法2、规律迭代法官方答案迭代题目描述给定一个长度为 n 的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) = 0 * arrk[0] + 1 * arrk[1] + … + (n - 1) * arrk[n - 1]返回 F(0), F(1), …, F(n-1)中的最大值 。生成的测试用例让答案符合 32 位 整数。示例 1:输入: nums = [原创 2022-04-22 21:03:41 · 2441 阅读 · 0 评论 -
LeetCode——824. 山羊拉丁文
824. 山羊拉丁文题目描述答案我的代码其他答案官网答案找到每一个单词 + 模拟题目描述给你一个由若干单词组成的句子 sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为 “山羊拉丁文(Goat Latin)”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:如果单词以元音开头('a', 'e', 'i', 'o', 'u'),在单词后添加"ma"。例如,单词 "apple" 变为 "applema" 。如果单词以原创 2022-04-21 09:10:50 · 2314 阅读 · 0 评论 -
LeetCode——388. 文件的最长绝对路径
388. 文件的最长绝对路径题目描述答案方法一:栈方法二:遍历题目描述假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个示例:这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,该子目录下包含文件 file2.ext 。在文本格式中,如下所示(⟶表示制表符):dir⟶ subdir1⟶ ⟶ file1原创 2022-04-20 22:29:52 · 2288 阅读 · 0 评论 -
LeetCode——821. 字符的最短距离
821. 字符的最短距离题目描述答案我的代码官方答案题解代码复杂度分析题目描述给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。示例 1:输入:s = “loveleetcode”, c = “e”输出:[3原创 2022-04-19 17:11:08 · 2608 阅读 · 0 评论 -
LeetCode——386. 字典序排数
文章目录题目答案1、暴力法2、递归3、官方答案题目给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。示例 1:输入:n = 13输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2:输入:n = 2输出:[1,2]提示:1 <= n <= 5 * 104答案1、暴力法import java.util.ArrayList;import java.u原创 2022-04-18 18:11:06 · 2532 阅读 · 0 评论 -
LeetCode——819. 最常见的单词
文章目录题目描述答案我的代码官方答案哈希表 + 计数题目描述给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。示例:输入: paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."banned = ["h原创 2022-04-17 09:37:18 · 2278 阅读 · 0 评论 -
LeetCode——385. 迷你语法分析器
文章目录题目答案方法一:深度优先搜索题目给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。列表中的每个元素只可能是整数或整数嵌套列表示例 1:输入:s = "324",输出:324解释:你应该返回一个 NestedInteger 对象,其中只包含整数值 324。示例 2:输入:s = "[123,[456,[789]]]",输出:[123,[456,[789]]]解释:返回一个 NestedInteger 对象包含一个原创 2022-04-16 17:58:57 · 2299 阅读 · 0 评论 -
LeetCode——479. 最大回文数乘积
文章目录题目描述答案打表法枚举 + 数学题目描述给定一个整数 n ,返回 可表示为两个 n 位整数乘积的 最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余 。示例 1:输入:n = 2输出:987解释:99 x 91 = 9009, 9009 % 1337 = 987示例 2:输入: n = 1输出: 9提示:1 <= n <= 8答案打表法对于数据范围固定,并且答案固定,并且数据范围很小的题目,最快的是打表:class Solution {原创 2022-04-16 17:39:11 · 2510 阅读 · 0 评论 -
LeetCode——1672. 最富有客户的资产总量
文章目录题目描述代码我的代码官网代码知识点题目描述给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。示例 1:输入:accounts = [[1,2,3],[3,2,1]]输出:6解释:第 1 位客户的资产总量 = 1 + 2 + 3 = 6第 2 位原创 2022-04-14 19:40:50 · 2212 阅读 · 0 评论 -
LeetCode——380. O(1) 时间插入、删除和获取随机元素
文章目录题目代码我的代码官方代码题目实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存原创 2022-04-13 21:45:36 · 2298 阅读 · 0 评论 -
部分进制间的转换
十进制转换为十六进制import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner src=new Scanner(System.in); long n=src.nextLong(); String arry=Long.toHexString(n); arry=arry.toUpperCase(); System.out.println(arry); .原创 2021-02-28 16:15:41 · 2270 阅读 · 2 评论 -
蓝桥杯 基础练习 字母图形
问题描述利用字母可以组成一些美丽的图形,下面给出了一个例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。输出格式输出n行,每个m个字符,为你的图形。样例输入5 7样例输出ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABCimport java.util.Scann.原创 2021-02-21 14:34:30 · 2217 阅读 · 0 评论