Leetcode算法刷题
文章平均质量分 70
Leetcode 算法刷题,不断提高自己的算法能力。
一梦花海
大学生学习计算机
展开
-
Leetcode-判断平衡二叉树
Leetcode-判断平衡二叉树1.题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true2.解题思路根据上面平衡二叉树的判断条原创 2021-05-12 10:54:46 · 304 阅读 · 0 评论 -
leetcode-买卖股票的最佳时机 II
1.题目描述给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)...原创 2021-02-15 20:02:26 · 138 阅读 · 0 评论 -
Leetcode-123. 买卖股票的最佳时机 III
1.题目描述给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天(股票价格 = 1)...原创 2021-02-15 19:43:13 · 162 阅读 · 0 评论 -
Leetcode-和为K的子数组
1.题目描述给你一个整数数组arr。请你返回和为 奇数的子数组数目。由于答案可能会很大,请你将结果对10^9 + 7取余后返回。示例 1:输入:arr = [1,3,5]输出:4解释:所有的子数组为 [[1],[1,3],[1,3,5],[3],[3,5],[5]] 。所有子数组的和为 [1,4,9,3,8,5].奇数和包括 [1,9,3,5] ,所以答案为 4 。示例 2 :输入:arr = [2,4,6]输出:0解释:所有子数组为 [[2],[2,4]...原创 2021-02-07 22:01:11 · 378 阅读 · 0 评论 -
Leetcode-目标和
目录1.题目描述2.解题思路3.源代码实现1.题目描述给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3...原创 2021-02-01 22:20:32 · 283 阅读 · 0 评论 -
Leetcode-分割等和子集
1.题目描述给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.2.解题思路首先可以将本题转换为01 背包问题。为什么可以转..原创 2021-01-30 20:57:08 · 266 阅读 · 0 评论 -
Leetcode- 岛屿数量
1.题目描述给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1示例 2:输入:grid.原创 2021-01-17 15:33:19 · 1188 阅读 · 0 评论 -
Leetcode-最长公共子序列
目录1.题目描述2解题思路2.1 题意解析2.2 动态规划思路2.3 总结3.源代码1.题目描述给定两个字符串text1 和text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同...原创 2021-01-12 19:13:33 · 1426 阅读 · 0 评论 -
Leetcode-最长回文子序列
1.题目描述给定一个字符串s,找到其中最长的回文子序列,并返回该序列的长度。可以假设s的最大长度为1000。示例 1:输入:"bbbab"输出:4一个可能的最长回文子序列为 "bbbb"。示例 2:输入:"cbbd"输出:2一个可能的最长回文子序列为 "bb"。2.解题思路本题属于使用动态规划方法解决的一道题,回文序列的意思应该不用去解释了。做动态规划的题目,首先要去定义dp数组的含义。这里我们定义一个二维数组dpdp[i][j]表示字符...原创 2021-01-12 14:46:03 · 414 阅读 · 0 评论 -
Leetcode- 分割回文串 II
目录1.题目描述2. 解题思路2.1 动态规划3.源代码1.题目描述给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。返回符合要求的最少分割次数。示例:输入: "aab"输出: 1解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。2. 解题思路2.1 动态规划没做过 5.最长回文串 和 131. 分割回文串 可以先去做下因为要切割出多个回文串,那么意味着就我们需要判断哪个子串是回文串,如果我们不做预处理,那...原创 2021-01-10 20:05:15 · 167 阅读 · 0 评论 -
Leetcode-分割回文串
目录1.题目描述2.解题思路3. 源代码3.1 回溯法3.2 回溯的优化(记忆化搜索)4. 总结1.题目描述给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案。示例1:输入: "aab"输出: 1解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。2.解题思路本题这涉及到两个关键问题:切割问题,有不同的切割方式1.判断回文2.相信这里不同的切割方式可以搞懵很多同学了。...原创 2021-01-09 21:31:15 · 668 阅读 · 0 评论 -
Leetcode-最长回文子串
1.题目描述给你一个字符串s,找到s中最长的回文子串。示例一:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例二:输入:s = "cbbd"输出:"bb"示例三:输入:s = "a"输出:"a"2.解题思路根据题目的意思我们可以知道简单的循环暴力解法加上判断字符串是否是回文字符串时间可能会超出限制。所以我们在判断回文字符串的时候采用双指针的思想,运用中心扩展法来解决问题。因为回文串是中心对称的,我们可以先枚举...原创 2021-01-09 16:57:23 · 1603 阅读 · 1 评论 -
Leetcode-无重叠区间
1.题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。2.解题思路首先要对区间的头进行排序,这里以区间的开始来排序,然后再遍历区间。1.如果后面区间的头小于当前区间的尾,比如当前区间[2,6],后面区间是[3,4]或者是[2,5]。说明这两个区间有重复,必须要移除一个,那么移除哪一个呢?为了防止下一个区间和现有的区间有重叠,我们应该让现有区间原创 2021-01-08 19:40:28 · 222 阅读 · 2 评论 -
Leetcode-旋转数组
1.题目描述定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释: 向右旋转 1 步: [99...原创 2021-01-08 14:53:44 · 189 阅读 · 0 评论 -
Leetcode-验证回文字符串 Ⅱ
1.题目描述给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。2.解题思路题目问我们最多删除一个字符的情况下是否可以构成回文字符串,第一反应是逐个删除各个字符看剩下的字符串是否为回文串,但是这个时间复杂度是 O(N ^ 2),题目给出的字符串的长度最大为 50000 ,此做法会超时。回文串的特点是左右对称。假如有两个指针从字符串的两.原创 2021-01-07 17:28:48 · 227 阅读 · 0 评论 -
Leetcode- 平方数之和
1.题目描述给定一个非负整数c,你要判断是否存在两个整数a和b,使得a2+ b2= c。示例1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例2:输入:c = 3输出:false2.解题思路可以看成是在元素为0~target 的有序数组中查找两个数,使这两个数的平方和为target,如果能找到,则返回true,如果不能找到则返回false。 本题的关键是右指针的初始化,实现剪枝,从而降低时间复杂度。设右指针为 x,左指针固...原创 2021-01-07 16:02:46 · 414 阅读 · 0 评论 -
Leetcode-组合总和 Ⅳ
1. 题目描述给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。示例:nums = [1, 2, 3]target = 4所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。因此输出为 7。2.解题思路初看问题的时候就认为回溯可以可以解决,即运用简单的递归就可以。int ans=0;public in.原创 2021-01-06 14:56:49 · 185 阅读 · 0 评论 -
Leetcode-完全平方数
目录1.题目描述2.解题思路3.源代码4.完全背包问题1.题目描述给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例2:输入: n = 13输出: 2解释: 13 = 4 + 9.2.解题思路这个问题就是完全背包问题的简单变种,在这里,平方数sqr就是物品的重量weight,物品产...原创 2021-01-05 20:10:53 · 337 阅读 · 0 评论 -
Leetcode-团灭组合问题
目录1.问题描述2.解题思路2.1 算法思路3.源代码4.其他组合总和问题4.1Leetcode40-组合总和 II4.2Leetcode216-组合总和 III1.问题描述给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。 解集不能包含重复的组合示例1...原创 2021-01-04 15:16:25 · 190 阅读 · 0 评论 -
LeetCode-全排列
1.题目描述给定一个没有重复数字的序列,返回其所有可能的全排列。输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]2.思路和算法这个问题可以看做是n个排列成一行的空格,我们需要从左往右依此填入题目给定的 n 个数,每个数只能使用一次。那么很直接的可以想到一种穷举的算法,即从左往右每一个位置都依此尝试填入一个数,看能不能填完这 nn 个空格,在程序中我们可以用「回溯法」..原创 2021-01-01 18:31:30 · 313 阅读 · 2 评论 -
Leetcode-76. 最小覆盖子串
目录1.题目描述1.1 实例一:2.解题思路2.1 滑动窗口思想2.2 面临的问题2.3 优化3.图示解题思路4.代码5.提交运行详情1.题目描述给你一个字符串 S、一个字符串 T 。请你设计一种算法,可以在 O(n) 的时间复杂度内,从字符串 S 里面找出:包含 T 所有字符的最小子串。1.1 实例一:输入:S = "ADOBECODEBANC", T = "ABC"输出:"BANC"提示:如果 S 中不存这样的子串,则返回空字符串...原创 2020-08-21 16:29:35 · 117 阅读 · 0 评论 -
Leetcode-Pow(x,n) 快速幂经典题题目
Leetcode-Pow(x,n) 快速幂经典题题目目录Leetcode-Pow(x,n) 快速幂经典题题目1.题目描述2.解题思路3.源码1.题目描述实现pow(x, n),即计算x的n次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = ...原创 2020-08-17 15:03:49 · 258 阅读 · 0 评论 -
LeetCode-03 无重复字符的最长子串
LeetCode-03 无重复字符的最长子串目录LeetCode-03 无重复字符的最长子串1.题目描述2.主要思路3.实现代码3.1 最简单的利用数组来进行操作3.2 双指针1.题目描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",...原创 2020-07-24 14:37:47 · 176 阅读 · 0 评论 -
Leetcode01-l两数之和
Leetcode01-l两数之和文章目录Leetcode01-l两数之和1.题目描述2.主要思路3.代码实现3.1 暴力实现3.2 哈希映射1.题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7,...原创 2020-04-16 22:02:35 · 303 阅读 · 0 评论 -
前缀和技巧
前缀和技巧今天来聊一道简单却十分巧妙的算法问题:算出一共有几个和为 k 的子数组。那我把所有子数组都穷举出来,算它们的和,看看谁的和等于 k 不就行了。关键是,如何快速得到某个子数组的和呢,比如说给你一个数组 nums,让你实现一个接口 sum(i, j),这个接口要返回 nums[i..j] 的和,而且会被多次调用,你怎么实现这个接口呢?因为接口要被多次调用,显然不能每次都去遍历 num...原创 2020-04-16 21:26:25 · 231 阅读 · 0 评论 -
二分搜索模板
二分搜索模板文章目录二分搜索模板1.寻找左侧边界的二分搜索2.寻找右边界的二分查找3.二分查找完整模板1.寻找左侧边界的二分搜索关于上一篇的博文介绍二分查找的基本的算法原理,当然这个算法是存在很多问题比如当查询到边界问题时就会存在一个左右边界的搜索出现问题。以下是最常见的代码形式,其中的标记是需要注意的细节:int left_bound(int[] nums, int target) {...原创 2020-04-12 13:34:04 · 213 阅读 · 0 评论 -
P1008 三连击
题目描述将1,2, \cdots ,91,2,⋯,9共99个数分成33组,分别组成33个三位数,且使这33个三位数构成1:2:31:2:3的比例,试求出所有满足条件的33个三位数。输入输出格式输入格式: 木有输入 输出格式: 若干行,每行33个数字。按照每行第11个数字升序排列。 输入输出样例输入样例#1: 复制无输出样例#1: 复制...原创 2019-01-21 16:27:22 · 327 阅读 · 0 评论