LeetCode
LeetCode
cutlery1137
这个作者很懒,什么都没留下…
展开
-
leetcode 27. 移除元素【双指针】
27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。程序说明:设置两个指针,i 负责遍历数组,j 指向值等于val的位置。i 指针遍历数组,当nums[i] == val时,跳过此次循环;当nums[i] != val时,把nums[i] 复制到 j 指向的位置,并且 j++。原创 2022-02-18 04:04:57 · 358 阅读 · 0 评论 -
leetcode 58. 最后一个单词的长度
58. 最后一个单词的长度给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = “Hello World”输出:5示例 2:输入:s = " fly me to the moon "输出:4示例 3:输入:s = “luffy is still joyboy”输出:6代码如下:class Solution { public int len原创 2022-02-10 23:02:07 · 220 阅读 · 0 评论 -
leetcode 67. 二进制求和
67. 二进制求和给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”程序说明:从低位开始,某一位的值,等于上一位两个数的和再加上进位。要分a比b长,和b比a长两种情况。注意最后还要判断一下carry是否为0,如果不为0则补一位1。代码如下:class Solution {原创 2022-02-09 23:14:39 · 333 阅读 · 0 评论 -
leetcode 66. 加一【数学】
题目链接:66. 加一给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1]提示:1原创 2022-02-09 20:50:05 · 368 阅读 · 0 评论 -
leetcode 9. 回文数
9. 回文数给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。原创 2022-02-06 22:25:12 · 461 阅读 · 0 评论 -
leetcode 3. 无重复字符的最长子串【滑动窗口】【哈希表】
3. 无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度原创 2022-02-06 20:54:27 · 131 阅读 · 0 评论 -
leetcode 1. 两数之和【枚举】【哈希表】
题目链接:1. 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。程序说明:对于数组中每一个数,找是否存在另一个数,二者相加等于target。循环遍历数组的时间复杂度为o(n),可以用哈希表优化成o(1)。总的时间复杂度从o(n^2)优化为o(n)。暴力枚举1class Soluti原创 2022-02-06 19:16:02 · 137 阅读 · 0 评论 -
leetcode 112. 路径总和【二叉树遍历】
题目链接:112. 路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 tr原创 2020-07-07 08:35:14 · 227 阅读 · 0 评论 -
leetcode 378. 有序矩阵中第K小的元素【优先队列】【二分】
题目链接:378. 有序矩阵中第K小的元素给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [[ 1, 5, 9],[10, 11, 13],[12, 13, 15]],k = 8,返回 13。程序说明:代码如下:...原创 2020-07-05 21:49:41 · 158 阅读 · 0 评论 -
leetcode 240. 搜索二维矩阵 II
题目链接:240. 搜索二维矩阵 II编写一个高效的算法来搜索 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,返回 t原创 2020-07-05 19:50:30 · 172 阅读 · 0 评论 -
leetcode 74. 搜索二维矩阵【二分】
题目链接:74. 搜索二维矩阵编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23, 30, 34, 50]]target = 3输出: true示例 2:输入:matrix = [[1, 3, 5, 7],[10, 11, 16, 20],[23,原创 2020-07-02 20:54:21 · 247 阅读 · 0 评论 -
leetcode 111. 二叉树的最小深度
题目链接:111. 二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.程序说明:注意和104. 二叉树的最大深度的不同,不能只把最大深度中的max改为min,因为如果某结点只有一个子树,那么它不是叶子结点,但是会被记录最小深度。代原创 2020-06-01 20:55:21 · 182 阅读 · 0 评论 -
leetcode 104. 二叉树的最大深度
题目链接:104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。代码如下:class Solution { public int maxDepth(TreeNode root) { if(root ==原创 2020-06-01 20:00:13 · 108 阅读 · 0 评论 -
leetcode 101. 对称二叉树【递归】
题目链接:101. 对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3程序说明:递归的结束条件是左右子树(假设t1,t2分别为左右子树)是否为空,或者左右子树的值是否相等。如果没有结束则向下递归,分别比较t1的左子树和t2的右子树,t1的右子树和t2的左子树。代码如原创 2020-05-31 11:57:05 · 151 阅读 · 0 评论 -
leetcode 122. 买卖股票的最佳时机 II【贪心】
题目链接:122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 =原创 2020-05-30 14:27:48 · 146 阅读 · 0 评论 -
leetcode 53. 最大子序和【贪心】【线性DP】
题目链接:53. 最大子序和给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4代码如下://贪心class Solution { public int maxSubArray(int[] nums) { int res = nums[0];原创 2020-05-30 11:20:22 · 199 阅读 · 0 评论 -
leetcode 198. 打家劫舍【线性DP】
题目链接:198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。原创 2020-05-29 14:01:54 · 175 阅读 · 0 评论 -
leetcode 172. 阶乘后的零【数学问题】
题目链接:172. 阶乘后的零给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。程序说明:参考链接:C++ 数学 详细推导及推广直接计算阶乘有可能会溢出,可以用数学方法加以转化。出现0的情况只有2和5相乘,由于1到9的数字中,2的倍数比较多,因此可以计算5出现了多少次。需要注意的是当n原创 2020-05-28 20:07:30 · 186 阅读 · 0 评论 -
leetcode 7. 整数反转
题目链接:7. 整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。程序说明:难度是如何判断溢出,参考链接:画解算法:7. 整数反转代码如下:class Solution {原创 2020-05-28 17:08:05 · 144 阅读 · 0 评论 -
leetcode 1160. 拼写单词
题目链接:1160. 拼写单词给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。示例 1:输入:words = [“cat”,“bt”,“hat”,“tree”], chars = “atach”原创 2020-05-28 15:10:32 · 227 阅读 · 0 评论 -
leetcode 892. 三维形体的表面积
题目链接:892. 三维形体的表面积在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。请你返回最终形体的表面积。示例 1:输入:[[2]]输出:10示例 2:输入:[[1,2],[3,4]]输出:34示例 3:输入:[[1,0],[0,2]]输出:16示例 4...原创 2020-04-12 11:33:12 · 162 阅读 · 0 评论 -
leetcode 365. 水壶问题【最大公约数】
题目链接:365. 水壶问题有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous “Die Hard” example)输入: ...原创 2020-03-21 13:34:47 · 266 阅读 · 0 评论 -
leetcode 409. 最长回文串
题目链接:409. 最长回文串给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:“abccccdd”输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。代码如下:class Solutio...原创 2020-03-19 15:14:46 · 144 阅读 · 0 评论 -
leetcode 836. 矩形重叠【数学问题】
题目链接:836. 矩形重叠矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形,判断它们是否重叠并返回结果。示例 1:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]输出:true...原创 2020-03-18 15:59:47 · 139 阅读 · 0 评论 -
leetcode 695. 岛屿的最大面积【DFS】
题目链接:695. 岛屿的最大面积给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0...原创 2020-03-17 20:14:06 · 173 阅读 · 0 评论 -
leetcode 169. 多数元素
题目链接:169. 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2程序说明:第一种方法,先将数组排序,位于中间的数就是答案。时间复杂度O(nlogn)。第...原创 2020-03-13 06:21:15 · 143 阅读 · 0 评论 -
leetcode 1071. 字符串的最大公因子
题目链接:1071. 字符串的最大公因子对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。示例 1:输入:str1 = “ABCABC”, str2 = “ABC”输出:“ABC”示例 2:输入:str1 = “ABABAB”, s...原创 2020-03-12 13:32:48 · 193 阅读 · 0 评论 -
leetcode 994. 腐烂的橘子【BFS】
题目链接:994. 腐烂的橘子在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。示例 1:输入:[[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2:...原创 2020-03-11 22:04:14 · 275 阅读 · 0 评论 -
leetcode 1013. 将数组分成和相等的三个部分
题目链接:1013. 将数组分成和相等的三个部分给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + … + A[i] = A[i+1] + A[i+2] + … + A[j-1] = A[j] + A[j-1] + … + A[A.length - 1]) 就...原创 2020-03-11 20:07:13 · 273 阅读 · 0 评论 -
leetcode 70. 爬楼梯【斐波那契数列】
题目链接:70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 ...原创 2020-03-10 22:55:49 · 180 阅读 · 0 评论 -
leetcode 206. 反转链表
题目链接:206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL程序说明:两种做法,第一种是用两个指针不断迭代。cur指向当前结点,pre指向前一个结点,然后cur指向pre,两个指针前进一位。第二种做法是用递归实现的,可以先假设2,3,4三个结点...原创 2020-03-10 21:01:37 · 145 阅读 · 0 评论 -
leetcode 121. 买卖股票的最佳时机【线性DP】
题目链接:121. 买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润...原创 2020-03-10 12:14:25 · 177 阅读 · 0 评论 -
leetcode 322. 零钱兑换【背包问题】
题目链接:322. 零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出...原创 2020-03-08 18:27:43 · 165 阅读 · 0 评论 -
leetcode 面试题57 - II. 和为s的连续正数序列【滑动窗口】
题目链接:面试题57 - II. 和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]程...原创 2020-03-07 10:16:40 · 179 阅读 · 0 评论 -
leetcode 26. 删除排序数组中的重复项【双指针】
题目链接:26. 删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度...原创 2020-03-03 17:36:03 · 186 阅读 · 0 评论 -
leetcode 88. 合并两个有序数组【双指针】
题目链接:88. 合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0],...原创 2020-03-03 14:44:45 · 203 阅读 · 0 评论