LeetCode刷题
LeetCode刷题
如我般骄傲
学习
展开
-
leetcode-Algorithms-2129| 将标题首字母大写
原题给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 :如果单词的长度为 1 或者 2 ,所有字母变成小写。否则,将单词首字母大写,剩余字母变成小写。请你返回 大写后 的 title 。 示例 1:输入:title = "capiTalIze tHe titLe"输出:"Capitalize The Title"解释:由于所有单词的长度都至少为 3 ,将每个单词首字母大写,剩余字母变为小写。示例原创 2022-01-17 09:24:49 · 212 阅读 · 0 评论 -
leetcode-Algorithms-1881| 插入后的最大值
原题给你一个非常大的整数 n 和一个整数数字 x ,大整数 n 用一个字符串表示。n 中每一位数字和数字 x 都处于闭区间 [1, 9] 中,且 n 可能表示一个 负数 。你打算通过在 n 的十进制表示的任意位置插入 x 来 最大化 n 的 数值 。但 不能 在负号的左边插入 x 。例如,如果 n = 73 且 x = 6 ,那么最佳方案是将 6 插入 7 和 3 之间,使 n = 763 。如果 n = -55 且 x = 2 ,那么最佳方案是将 2 插在第一个 5 之前,使 n原创 2022-01-16 18:39:05 · 166 阅读 · 0 评论 -
leetcode-Algorithms-1716|计算力扣银行的钱
原题Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。最开始,他在周一的时候存入 1 块钱。从周二到周日,他每天都比前一天多存入 1 块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1 块钱。给你 n ,请你返回在第 n 天结束的时候他在力扣银行总共存了多少块钱。 示例 1:输入:n = 4输出:10解释:第 4 天后,总额为 1 + 2 + 3 + 4 = 10 。示例 2:输入:n = 10输出:37解释:第 10 天后,总额为 (1 + 2原创 2022-01-15 17:22:24 · 126 阅读 · 0 评论 -
leetcode-Algorithms-541|反转字符串 II
原题给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。 示例 1:输入:s = "abcdefg", k = 2输出:"bacdfeg"示例 2:输入:s = "abcd", k = 2输出:"bacd" 提示:1 <= s.length <= 104s 仅原创 2022-01-13 20:50:52 · 116 阅读 · 0 评论 -
leetcode-Algorithms-334|递增的三元子序列
原题给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。 示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输出:fa原创 2022-01-13 00:20:34 · 110 阅读 · 0 评论 -
leetcode-Algorithms-101|对称二叉树
原题思路我总共有两种思路1、递归2、中序遍历输出,根据长度判断深度,每一层都是一个回文数。代码class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return false; } return dfs(root.left, root.right); } private bool原创 2021-11-10 11:22:10 · 4671 阅读 · 0 评论 -
leetcode-Algorithms-495|提莫攻击
原题在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。正式地讲,提莫在 t 发起发起攻击意味着艾希在时间区间 [t, t + duration - 1](含 t 和 t + duration - 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。给你一个 非递减 的整数数组 ti原创 2021-11-10 10:29:01 · 121 阅读 · 0 评论 -
leetcode-Algorithms-226|翻转二叉树
原题思路DFS,递归代码public class Solution_226 { public static void main(String[] args) { TreeNode root = new TreeNode(4); root.left = new TreeNode(2); root.right = new TreeNode(7); root.left.left = new TreeNode(1);原创 2021-11-08 18:20:45 · 1783 阅读 · 0 评论 -
leetcode-Algorithms-299|猜数字游戏
原题你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls", 公牛),有多少位属于数字猜对了但是位置不对(称为 "Cows", 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。提示的格式原创 2021-11-08 10:52:42 · 155 阅读 · 0 评论 -
leetcode-Algorithms-1218|最长定差子序列
原题给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。 示例 1:输入:arr = [1,2,3,4], difference = 1输出:4解释:最长的等差子序列是 [1,2,3,4]。示例 2:输入:arr = [1,3,5,7], difference = 1原创 2021-11-05 17:32:14 · 103 阅读 · 0 评论 -
leetcode-Algorithms-113|路径总和 II
原题思路DFS代码public class Solution_113 { public static void main(String[] args) { TreeNode root = new TreeNode(5); root.left = new TreeNode(4); root.left.left = new TreeNode(11); root.left.left.left = new TreeNode(7);原创 2021-11-05 14:53:50 · 116 阅读 · 0 评论 -
leetcode-Algorithms-112|路径总和
原题思路树的DFS代码public class Solution_112 { public static void main(String[] args) { TreeNode root = new TreeNode(5); root.left = new TreeNode(4); root.left.left = new TreeNode(11); root.left.left.left = new TreeNode(7);原创 2021-11-05 11:02:29 · 775 阅读 · 0 评论 -
leetcode-Algorithms-238|除自身以外数组的乘积
原题给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 示例:输入: [1,2,3,4]输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间原创 2021-11-04 15:08:08 · 124 阅读 · 0 评论 -
leetcode-Algorithms-1306|跳跃游戏 III
原题这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。注意,不管是什么情况下,你都无法跳到数组之外。 示例 1:输入:arr = [4,2,3,0,3,1,2], start = 5输出:true解释:到达值为 0 的下标 3 有以下可能方案: 下标 5 -> 下标 4 -> 下标 1 ->原创 2021-11-04 13:58:28 · 172 阅读 · 0 评论 -
leetcode-Algorithms-55|跳跃游戏
原题给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可原创 2021-11-04 11:16:32 · 117 阅读 · 0 评论 -
leetcode-Algorithms-781|森林中的兔子
原题森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。示例:输入: answers = [1, 1, 2]输出: 5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 "2" 的兔子为蓝色。此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。因此森林中兔子的最少数量是 5: 3原创 2021-11-03 22:56:44 · 125 阅读 · 0 评论 -
leetcode-Algorithms-45|跳跃游戏 II
原题给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。 示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4]输出原创 2021-11-03 21:46:59 · 119 阅读 · 0 评论 -
leetcode-Algorithms-240|搜索二维矩阵II
原题思路我觉得和竖着的没啥关系,先找到对应行,再二分查找。代码package leetcode.Algorithms;public class Solution_240 { public static void main(String[] args) { int[][] matrix = {{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}}; searchMatrix(matrix, 3); }原创 2021-10-08 09:53:44 · 110 阅读 · 0 评论 -
leetcode-Algorithms-187|重复的DNA序列
原题所有 DNA 都由一系列缩写为 'A','C','G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。 示例 1:输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出:["AAAAACCCCC","CCCCCAAAAA"]示例 2:输入:s = "AAAAAAAA原创 2021-10-08 09:41:49 · 103 阅读 · 0 评论 -
leetcode-Algorithms-74|搜索二维矩阵
原题思路二分查找代码package leetcode.Algorithms;public class Solution_74 { public static void main(String[] args) { int[][] matrix = {{1, 3, 5, 7}, {10, 11, 16, 20}, {23, 30, 34, 60}}; searchMatrix(matrix, 3); } public static bool原创 2021-09-27 09:21:38 · 105 阅读 · 0 评论 -
leetcode-Algorithms-697|数组的度
原题给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例 1:输入:[1, 2, 2, 3, 1]输出:2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [原创 2021-09-25 23:19:50 · 60 阅读 · 0 评论 -
leetcode-Algorithms-24|两两交换链表中的节点
原题思路2个双端队列代码package leetcode.Algorithms;import leetcode.List.ListNode;import java.util.ArrayDeque;import java.util.Deque;public class Solution_24 { public static void main(String[] args) { ListNode head = new ListNode(1); h原创 2021-09-25 22:00:13 · 98 阅读 · 0 评论 -
leetcode-Algorithms-583|两个字符串的删除操作
原题给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。示例:输入: "sea", "eat"输出: 2解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea" 提示:给定单词的长度不超过500。给定单词中的字符只含有小写字母。通过次数43,571提交次数71,406来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/del原创 2021-09-25 20:47:31 · 109 阅读 · 0 评论 -
leetcode-Algorithms-8|字符串转换整数 (atoi)
原题真百折不挠请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整原创 2021-09-24 15:54:45 · 128 阅读 · 0 评论 -
leetcode-剑指Offer- 47|礼物的最大价值
原题在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 提示:0 < grid.length <= 2000 &l原创 2021-09-24 11:07:06 · 97 阅读 · 0 评论 -
leetcode-Algorithms-92|反转链表II
原题思路双端队列秀一下代码package leetcode.Algorithms;import leetcode.List.ListNode;import java.util.ArrayDeque;import java.util.Deque;public class Solution_92 { public static void main(String[] args) { ListNode head = new ListNode(1);原创 2021-09-23 10:30:53 · 102 阅读 · 0 评论 -
leetcode-Algorithms-695|岛屿最大面积
原题思路广度优先搜索,需要考虑好终止条件,并且考虑好返回值是什么。代码package leetcode.Algorithms;public class Solution_695 { public static void main(String[] args) { int[][] grid = {{0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 1,原创 2021-09-22 16:59:13 · 120 阅读 · 0 评论 -
leetcode-Algorithms-206|反转链表
原题思路栈代码package nowcoder;import leetcode.List.ListNode;import java.util.Stack;public class Solution_NC78 { public static void main(String[] args) { ListNode head = new ListNode(1); head.next = new ListNode(2); head.nex原创 2021-09-22 14:32:17 · 112 阅读 · 0 评论 -
leetcode-Algorithms-面试题-08.01 |三步问题
原题三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1: 输入:n = 3 输出:4 说明: 有四种走法示例2: 输入:n = 5 输出:13提示:n范围在[1, 1000000]之间通过次数41,877提交次数115,066来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/three-ste原创 2021-09-18 14:23:48 · 135 阅读 · 0 评论 -
leetcode-Algorithms-12|整数转罗马数字
原题罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。原创 2021-09-17 14:10:47 · 120 阅读 · 0 评论 -
leetcode-Algorithms-36|有效的数独
原题思路hashset关键代码 for (int j = 0; j < 9; j++) { if (board[i][j] != '.') { rowChar = board[i][j]; // 按行来的字符 colChar = board[j][i]; // 按列来的字符 squChar = board[i / 3 *原创 2021-09-17 09:50:50 · 114 阅读 · 0 评论 -
leetcode-Algorithms-97|交错字符串
原题给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...提示:a + b 意味着字符串原创 2021-09-15 15:29:37 · 121 阅读 · 0 评论 -
leetcode-Algorithms-34|在排序数组中查找元素的第一个和最后一个位置
原题给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:原创 2021-09-14 15:09:46 · 101 阅读 · 0 评论 -
leetcode-Algorithms-554|砖墙
原题你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和相等。你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量 。转载 2021-09-13 18:02:32 · 93 阅读 · 0 评论 -
leetcode-Algorithms-面试题-02.06 |回文链表
原题编写一个函数,检查输入的链表是否是回文的。 示例 1:输入: 1->2输出: false 示例 2:输入: 1->2->2->1输出: true 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路双端队列代码class Solution { public原创 2021-09-10 15:41:12 · 150 阅读 · 0 评论 -
leetcode-Algorithms-216|组合总和 III
原题找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。 示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]通过次数96,161提交次数130,218来源:力扣(LeetCode)链接:https://leetcode-cn.com/pro原创 2021-09-10 15:20:13 · 95 阅读 · 0 评论 -
leetcode-Algorithms-1894|找到需要补充粉笔的学生编号
原题一个班级里有 n 个学生,编号为 0 到 n - 1 。每个学生会依次回答问题,编号为 0 的学生先回答,然后是编号为 1 的学生,以此类推,直到编号为 n - 1 的学生,然后老师会重复这个过程,重新从编号为 0 的学生开始回答问题。给你一个长度为 n 且下标从 0 开始的整数数组 chalk 和一个整数 k 。一开始粉笔盒里总共有 k 支粉笔。当编号为 i 的学生回答问题时,他会消耗 chalk[i] 支粉笔。如果剩余粉笔数量 严格小于 chalk[i] ,那么学生 i 需要 补充 粉笔。原创 2021-09-10 00:15:26 · 119 阅读 · 0 评论 -
leetcode-Algorithms-445|两数相加 II
原题思路双端队列代码package leetcode.Algorithms;import leetcode.List.ListNode;import java.util.ArrayDeque;import java.util.Deque;public class Solution_445 { public static void main(String[] args) { ListNode l1 = new ListNode(2); l1.ne原创 2021-09-09 14:18:49 · 116 阅读 · 0 评论 -
leetcode-Algorithms-796|旋转字符串
原题给定两个字符串, A 和 B。A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' 。如果在若干次旋转操作之后,A 能变成B,那么返回True。示例 1:输入: A = 'abcde', B = 'cdeab'输出: true示例 2:输入: A = 'abcde', B = 'abced'输出: false注意:A 和 B 长度不超过 100。来源:力扣(LeetCode)链接:https://原创 2021-09-08 17:30:26 · 118 阅读 · 0 评论 -
leetcode-Algorithms-746|使用最小花费爬楼梯
原题数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。 示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。 示例 2:输入原创 2021-09-08 16:50:57 · 115 阅读 · 0 评论