算法
有头发的老可爱
这个作者很懒,什么都没留下…
展开
-
为高尔夫比赛砍树
为高尔夫比赛砍树:你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 m x n 的矩阵表示, 在这个矩阵中:0 表示障碍,无法触碰1 表示地面,可以行走比 1 大的数 表示有树的单元格,可以行走,数值表示树的高度每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它。你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为 1(即变为地面)。你将从 (0, 0) 点开始工作,返回你砍完所有树需要走的最小步数。 如果你无法砍原创 2022-05-23 15:04:37 · 303 阅读 · 0 评论 -
最少移动次数使数组元素相等
最少移动次数使数组元素相等:给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最少移动数。在一步操作中,你可以使数组中的一个元素加 1 或者减 1 。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/minimum-moves-to-equal-array-elements-ii输入:nums = [1,2,3]输出:2解释:只需要两步操作(每步操作指南使一个元素加 1 或减 1):[1,2,3] => [2,2原创 2022-05-19 15:18:42 · 453 阅读 · 0 评论 -
后继者:找出二叉搜索树中指定节点的“下一个”节点
后继者:设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/successor-lccipublic class InorderSuccessor { public static TreeNode inorderSuccessor(TreeNode root, TreeNode p) { Deque<原创 2022-05-16 15:42:44 · 254 阅读 · 0 评论 -
字符串一次编辑
一次编辑:字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。作者:LeetCode-Solution链接:https://leetcode.cn/problems/one-away-lcci/solution/yi-ci-bian-ji-by-leetcode-solution-2xkr/来源:力扣(LeetCode)输入:first = “pale”second = “ple”输出: Truepu原创 2022-05-13 16:35:37 · 144 阅读 · 0 评论 -
序列化和反序列化二叉搜索树
序列化和反序列化二叉搜索树:序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。编码的字符串应尽可能紧凑。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/serialize-and-原创 2022-05-11 17:09:42 · 123 阅读 · 0 评论 -
最近的请求次数
最近的请求次数:写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。来源:力扣(LeetCode)链接原创 2022-05-06 17:25:17 · 82 阅读 · 0 评论 -
按奇偶排序数组
按奇偶排序数组:给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/sort-array-by-parity/输入:nums = [3,1,2,4]输出:[2,4,3,1]解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。public class SortArrayByPa原创 2022-04-28 14:32:32 · 300 阅读 · 0 评论 -
三维形体投影面积
三维形体投影面积:在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。返回 所有三个投影的总面积 。来源:力扣(LeetCode)链接:https://leetcode-cn.com原创 2022-04-26 13:50:36 · 270 阅读 · 0 评论 -
随机数索引
随机数索引:给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。注意:数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/random-pick-indexint[] nums = new int[] {1,2,3,3,3};Solution solution = new Solution(nums);// pick(3)原创 2022-04-25 14:26:09 · 240 阅读 · 0 评论 -
二进制间距
二进制间距:给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-gap输入:n = 22输出:2解释:22 的二进制是原创 2022-04-24 16:10:02 · 342 阅读 · 0 评论 -
旋转数组迭代
旋转数组:给定一个长度为 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 位 整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rota原创 2022-04-22 14:31:13 · 106 阅读 · 0 评论 -
山羊拉丁文
山羊拉丁文:给你一个由若干单词组成的句子 sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为 “山羊拉丁文(Goat Latin)”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:如果单词以元音开头(‘a’, ‘e’, ‘i’, ‘o’, ‘u’),在单词后添加"ma"。例如,单词 “apple” 变为 “applema” 。如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"。例如原创 2022-04-21 14:19:04 · 199 阅读 · 0 评论 -
字符的最短距离
字符的最短距离:给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shortest-distance-to-a-原创 2022-04-19 11:30:41 · 65 阅读 · 0 评论 -
字典序排数
字典序排数:给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。链接:https://leetcode-cn.com/problems/lexicographical-numbers/solution/zi-dian-xu-pai-shu-by-leetcode-solution-98mz/来源:力扣(LeetCode)输入:n = 13输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]原创 2022-04-18 14:17:17 · 344 阅读 · 0 评论 -
最富有客户的资产总量
最富有客户的资产总量:给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/richest-customer-wealth输入:accounts = [[1,5],[7,3],[3,5原创 2022-04-14 16:20:18 · 61 阅读 · 0 评论 -
插入、删除和获取随机元素
插入、删除和获取随机元素:实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)原创 2022-04-13 15:04:18 · 266 阅读 · 0 评论 -
统计各位数字都不同的数字个数
统计各位数字都不同的数字个数:给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。输入:n = 2输出:91解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digitsclass CountNumbe原创 2022-04-11 14:20:11 · 97 阅读 · 0 评论 -
正则表达式匹配
正则表达式匹配:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/regular-expression-matching//采用动态规划,有点较难理解public class IsMatch { public stati原创 2022-04-07 15:31:36 · 63 阅读 · 0 评论 -
旋转字符串
旋转字符串:给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。例如, 若 s = ‘abcde’,在旋转一次之后结果就是’bcdea’ 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rotate-string输入: s = “abcde”, goal = “cdeab”输出: true//循环拼接字符串并判断publ原创 2022-04-07 10:47:43 · 60 阅读 · 0 评论 -
最小高度树
最小高度树:树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。给你一棵包含 n 个节点的树,标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表(每一个边都是一对标签),其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条无向边。可选择树中任何一个节点作为根。当选择节点 x 作为根节点时,设结果树的高度为 h 。在所有可能的树中,具有最小高度的树(即,min(h))被称为原创 2022-04-06 16:31:49 · 245 阅读 · 0 评论 -
寻找比目字母大的最小字母
寻找比目字母大的最小字母:给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-smallest-let原创 2022-04-03 13:52:30 · 75 阅读 · 0 评论 -
自除数简单实现
自除数:自除数 是指可以被它包含的每一位数整除的数。例如,128 是一个 自除数 ,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。自除数 不允许包含 0 。给定两个整数 left 和 right ,返回一个列表列表的元素是范围 [left, right] 内所有的 自除数 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/self-dividing-numberspublic class SelfDi原创 2022-03-31 10:22:26 · 216 阅读 · 0 评论 -
交替位二进制数
交替位二进制数:给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-number-with-alternating-bits/示例 :输入:n = 5输出:true解释:5 的二进制表示是:101--------------------------------------输入:n = 7输出:false解释:7原创 2022-03-28 16:31:13 · 278 阅读 · 0 评论 -
leetcode:图片平滑器
图片平滑器:图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problem原创 2022-03-24 10:45:16 · 369 阅读 · 0 评论