
算法
文章平均质量分 65
flushmeteor
这个作者很懒,什么都没留下…
展开
-
leetcode 第78题 子集
题目给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例1输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2输入:nums = [0]输出:[[],[0]]思路这个题最直观的方法就是用递归去实现。数组的每一个数字都可以选择是否拿取。还有一个比较巧妙的方法,就是用二进制来代表数组的每一个位置是否拿取。比原创 2021-11-21 11:23:06 · 475 阅读 · 0 评论 -
leetcode 第74题 搜索二维矩阵
题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例1输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true思路给的数组其实是整体有序的,行内升序,列内升序,行与行之间也是升序。其实一开始直接想到的就是先确定target是属于哪个行,也就是从第一列中查找target;然后在找到的行中,再原创 2021-10-23 17:20:01 · 223 阅读 · 0 评论 -
leetcode 第72题 编辑距离
题目给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/edit-distance示例1输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse ->原创 2021-10-10 22:36:36 · 109 阅读 · 0 评论 -
leetcode 第69题 x的平方根
题目给你一个非负整数 x ,计算并返回 x 的 平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。示例1输入:x = 4输出:2示例2输入:x = 8输出:2解释:8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。思路这个题最显的思路就是二分法。找到平方值小于等于x的最大数字。二分法的解题关键在于:(1)需要考虑数字溢出问题(2)需原创 2021-09-25 18:22:46 · 230 阅读 · 0 评论 -
leetcode 第65题 有效数字
题目有效数字(按顺序)可以分成以下几个部分:一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)至少一位数字部分有效数字列举如下:[“原创 2021-09-11 16:14:34 · 172 阅读 · 0 评论 -
leetcode 第62/63题 不同路径
题目一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例1输入:m = 3, n = 7输出:28思路这个题是明显的动态规划题目。令f(i,j)为机器人到达(i,j)处的不同路径数,可以发现f(i,j)=f(i-1,j)+f(i,j-1),i>0,j>0很显然我们可以给出一个时间复杂度 O(nm) 并且空原创 2021-08-21 17:27:51 · 101 阅读 · 0 评论 -
leetdoce第61题 旋转链表
题目给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例1输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]思路这个题其实用双指针很简单;复杂点在于k有可能会大于链表的长度。双指针的思路是:快指针先到达第k+1个节点,然后满指针指向head,两个指针同时前进直到快指针到达链表尾部。此时的满指针的next节点就是新的链表头、快指针指向原来的head即可。在k大于链表长度的情况下,计算出(k = k mod list_lengt原创 2021-08-21 15:30:45 · 157 阅读 · 0 评论 -
leetcode 第60题 排列序列(康拓展开)
题目给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。示例 1:输入:n = 3, k = 3输出:“213”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutation-sequence思路这个题思考了半天还是没有理清楚最原创 2021-08-14 19:53:06 · 197 阅读 · 0 评论 -
leetcode 第59题 螺旋矩阵 II
题目给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例1输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]思路这个题思路还是比较清晰的,就把螺旋填充的过程看成是分层的过程,一层层深入。深入的过程中跟踪层数的方法有两种,一种是直接记录层数,一种是记录每一层的边界。方法一class Solution { public int[][] generateMatrix(int n)原创 2021-08-01 11:14:48 · 290 阅读 · 0 评论 -
leetcode 第58题 最后一个单词的长度
题目给你一个字符串 s,由若干单词组成,单词之间用单个或多个连续的空格字符隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例1输入:s = “Hello World”输出:5示例2输入:s = " "输出:0思路这个题其实很简单,就是从后往前遍历字符串的每个字符就可以。但是相同的思路落实到代码上还是会有比较大的差异。下面写一下几个版本代码的差异代码第一版代码class Solution原创 2021-08-01 09:58:59 · 155 阅读 · 0 评论 -
leetcode 第57题 插入区间
题目给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例2输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10],[12,16]]原创 2021-07-24 12:13:30 · 183 阅读 · 0 评论 -
leetcode 第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-07-10 10:02:53 · 411 阅读 · 0 评论 -
leetcode 第53题 最大子序和
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6思路这个题其实有一个简单的思路,从前往后一直累加,如果当前累加和为负数,抛弃这个数,因为这个数对于后续的求和是拖后腿的。只有在正向情况下一直累加。在这个过程中可以一直记录累加的最大值。看了官方动态规划的思路,感觉很好,记录一下 链接,很值得学习一下,原创 2021-07-04 09:30:41 · 90 阅读 · 0 评论 -
leetcode 第51题 N皇后问题
题目n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例1输入:n = 4输出:[[".Q…","…Q",“Q…”,"…Q."],["…Q.",“Q…”,"…Q",".Q…"]]解释:如上图所示,4 皇后问题存在两个不同的解法。示例2输入:n = 1输出:[[“Q原创 2021-06-26 11:45:22 · 292 阅读 · 0 评论 -
leetcode 第48题 旋转图像
题目给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例1输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]示例2输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5原创 2021-06-12 18:15:24 · 156 阅读 · 0 评论 -
leetcode 第46题 全排列
目录题目思路代码复杂度耗时扩展题目给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例1输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2输入:nums = [0,1]输出:[[0,1],[1,0]]示例3输入:nums = [1]输出:[[1]]思路有一堆数字,找它的全排列,就是把所有的数字都用上,依次获取数字。第一个数字选择原创 2021-05-29 10:03:20 · 292 阅读 · 0 评论 -
leetcode 207 210 - 课程表 - 环形检测、拓扑排序
题目两个题非常相似,只记录210题现在你总共有 n 门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例1:输入: 2, [[1,0]]输出: [0,1]解释:总共有 2 门课程。要学习课程 1,你需...原创 2021-05-22 14:20:46 · 154 阅读 · 0 评论 -
leetcode 第45题 跳跃游戏Ⅱ
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/...原创 2021-04-24 16:45:30 · 151 阅读 · 0 评论 -
leetcode 第44题 通配符匹配
题目给定一个字符串(s) 和一个字符模式(p) ,实现一个支持'?'和'*'的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符?和*。示例1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例2:输入:s = "...原创 2021-04-18 14:24:05 · 1663 阅读 · 0 评论 -
leetcode 第43题 字符串相乘
题目给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。num1 和num2 只包含数字0-9。num1 和num2均不以零开头,除非是数字 0 本身。不能使用任何标准库的大数...原创 2021-04-11 10:39:22 · 102 阅读 · 0 评论 -
leetcode 第41题 缺失的第一个正数
题目给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗?示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:0 <= nums.length <= 300-231 <= nums[i] <= 23...原创 2021-03-28 11:13:35 · 229 阅读 · 0 评论 -
leetcode 第40题 组合总和 II
题目给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例1:输入: candidates =[10,1,2,7,6,1,5], target =8,所求解集为:[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6]]示...原创 2021-03-21 14:23:22 · 141 阅读 · 0 评论 -
leetcode 第37题 解数独
题目编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。空白格用'.'表示。一个数独。答案被标成红色。提示:给定的数独序列只包含数字1-9和字符'.'。你可以假设给定的数独只有唯一解。给定数独永远是9x9形式的。来源:力扣(LeetCode)链接:https://leetcode-c...原创 2021-03-07 20:38:55 · 225 阅读 · 0 评论 -
leetcode 第36题 有效的数独
题目判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".","....原创 2021-02-28 20:18:54 · 129 阅读 · 0 评论 -
leetcode 第35题 搜索插入位置
题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/.原创 2021-02-21 20:41:23 · 196 阅读 · 0 评论 -
leetcode-第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-02-17 18:05:50 · 104 阅读 · 0 评论 -
leetcode-第33题 搜索旋转排序数组
题目升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为[4,5,6,7,0,1,2] )。请你在数组中搜索target ,如果数组中存在这个目标值,则返回它的索引,否则返回-1。示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4示例2:输入:nums = [4,5,6,7,0,1,2], target = 3输出:-1示例 3:输入:nums = [...原创 2021-02-06 21:30:14 · 129 阅读 · 0 评论 -
leetcode-第32题 最长有效括号
题目给你一个只包含 '('和 ')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-valid-parentheses思路 ...原创 2021-01-30 16:13:38 · 419 阅读 · 0 评论 -
leetcode-第31题 下一个排列
题目实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输出:[1]提示..原创 2021-01-24 11:26:45 · 221 阅读 · 0 评论 -
leetcode-第29题 两数相除
题目给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数dividend除以除数divisor得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333..) =...原创 2021-01-10 11:03:42 · 290 阅读 · 0 评论 -
leetcode-第28题 实现 strStr()
题目实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1来源:力扣(LeetCode)链接:https://leetcode-c...原创 2021-01-03 11:11:20 · 132 阅读 · 1 评论 -
leetcode-第27题 移除元素
题目给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0...原创 2021-01-03 10:22:50 · 109 阅读 · 0 评论 -
leetcode-第26题 删除排序数组中的重复项
题目给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长...原创 2021-01-03 10:08:24 · 156 阅读 · 0 评论 -
leetcode-第25题 K 个一组翻转链表
题目:给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不...原创 2020-12-27 14:33:20 · 376 阅读 · 0 评论 -
leetcode-第24题 两两交换链表中的节点
题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs思路 这...原创 2020-12-06 22:35:10 · 200 阅读 · 0 评论 -
leetcode-第23题 合并K个升序链表
题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:li...原创 2020-11-29 14:48:00 · 382 阅读 · 0 评论 -
leetcode-第22题 括号生成
题目数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses思路 首先,这个...原创 2020-11-21 22:22:21 · 153 阅读 · 0 评论 -
leetcode-第21题 合并两个有序链表
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists思路 这个题其实非常简单,本不值一提,但是在代码书写的时候还是有一些技巧需要反复磨练。链...原创 2020-11-15 15:01:27 · 196 阅读 · 0 评论 -
leetcode-第20题 有效的括号
题目给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出: false示例5:输入: "{[]}"输出: true来源:...原创 2020-11-15 14:29:58 · 299 阅读 · 0 评论 -
leetcode-第19题 删除链表的倒数第N个节点
题目:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list...原创 2020-11-08 16:24:51 · 116 阅读 · 0 评论