
LeetCode
文章平均质量分 52
lyd1995
这个作者很懒,什么都没留下…
展开
-
leetcode962-最大宽度坡
一、单调栈假设存在最大宽度,此时i,j的值为[x,y],宽度为(y-x)。我们来看看x和y自身满足的条件是什么。1、x需要满足什么样的条件我们先做一个假设,若存在一个索引k,并且:k < x,索引k满足:A[k] <= A[x]由于:A[y] >= A[x] >= A[k],那么可以使用k来代替x获得一个更大的宽度(y-k)因此在x之前的索引i,都应该满足A[i] > A[x]这意味着x必定会在一个从索引0开始的单调递减序列之中从索引0开始的单调递减序列可以通.原创 2021-03-25 19:27:11 · 272 阅读 · 0 评论 -
圆圈中最后剩下的数字
0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制: ...原创 2020-03-30 19:22:13 · 762 阅读 · 0 评论 -
LeetCode406-根据身高重建队列
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]...原创 2019-12-31 11:49:33 · 258 阅读 · 0 评论 -
LeetCode402-移掉K位数字
LeetCode402-移掉K位数字给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :...原创 2019-12-31 11:01:45 · 244 阅读 · 0 评论 -
LeetCode14-最长公共前缀
LeetCode14-最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。一、思路(一)直接遍历法...原创 2019-02-14 20:33:17 · 143 阅读 · 0 评论 -
LeetCode1-两数之和
LeetCode1-两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0,...原创 2019-02-06 18:04:57 · 176 阅读 · 0 评论 -
LeetCode2-两数相加
LeetCode2-两数相加给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&g...原创 2019-02-06 23:06:42 · 117 阅读 · 0 评论 -
LeetCode3-无重复字符的最长子串
LeetCode3-无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: ...原创 2019-02-09 11:13:48 · 116 阅读 · 0 评论 -
LeetCode18-四数之和
LeetCode18-四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。...原创 2019-02-22 09:40:21 · 110 阅读 · 0 评论 -
LeetCode5-最长回文子串
LeetCode5-最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”一、思路(一)直觉想法由于回文串的特点,左右对称,所以考虑设置两个指针分别指向起始位置和最后一个字符的位置,开始匹配具体做...原创 2019-02-10 19:33:32 · 193 阅读 · 0 评论 -
LeetCode19-删除链表的倒数第N个节点
LeetCode19-删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1-&gt;2-&gt;3-&gt;4-&gt;5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1-&gt;2-&gt;3-&gt;5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?.原创 2019-02-22 10:21:11 · 135 阅读 · 0 评论 -
LeetCode6-Z 字形变换
LeetCode6-Z 字形变换将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字...原创 2019-02-11 17:17:48 · 190 阅读 · 0 评论 -
LeetCode15-三数之和
LeetCode15-三数之和给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]...原创 2019-02-17 18:53:24 · 183 阅读 · 0 评论 -
LeetCode7-整数反转
LeetCode7-整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231−1][-2^{31},2^{31}-1][−231,231−1]。请根...原创 2019-02-12 16:50:14 · 200 阅读 · 0 评论 -
LeetCode21-合并两个有序链表
LeetCode21-合并两个有序链表将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4一、思路从头开始比较两个链表的元素大小,将较小的那个放入新建的链表之中,如此循环,直到其中一个链表的元素都被遍历过了为...原创 2019-02-27 21:27:14 · 97 阅读 · 0 评论 -
LeetCode8-字符串转换整数 (atoi)
LeetCode8-字符串转换整数 (atoi)请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整...原创 2019-02-13 11:16:11 · 232 阅读 · 0 评论 -
LeetCode22-括号生成
LeetCode22-括号生成给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]一、思路(一)迭代首先考虑,n个括号,有多少种合理的生成方法,分析几个简单的例子:n=1时"()&quo原创 2019-02-28 11:12:53 · 175 阅读 · 0 评论 -
LeetCode24-两两交换链表中的节点
LeetCode24-两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.一、分析创建一个额外的节点来保存下一个节点所指向的节点,这样就不会丢失节点易错点1:直接使用头结点return ...原创 2019-02-28 14:47:35 · 310 阅读 · 0 评论 -
LeetCode26- 删除排序数组中的重复项
LeetCode26- 删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑...原创 2019-02-28 15:02:49 · 100 阅读 · 0 评论 -
LeetCode27-移除元素
LeetCode27-移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2,...原创 2019-02-28 15:57:36 · 97 阅读 · 0 评论 -
LeetCode11-盛最多水的容器
LeetCode11-盛最多水的容器一、思路(一)双指针设置两个指针,分别指向左右两端,固定左边指针,移动右边的指针,确定每次移动的容器容量并与当前最大容量进行比较C++代码:class Solution {public: int maxArea(vector<int>& height) { int i = 0, len = height.size(); ...原创 2019-02-13 17:47:10 · 157 阅读 · 0 评论 -
LeetCode12-整数转罗马数字
LeetCode12-整数转罗马数字字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X ...原创 2019-02-13 22:27:07 · 192 阅读 · 0 评论 -
LeetCode13-罗马数字转整数
LeetCode13-罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2...原创 2019-02-14 11:24:46 · 170 阅读 · 0 评论 -
LeetCode16-最接近的三数之和
LeetCode16-最接近的三数之和给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).一、思...原创 2019-02-20 12:20:19 · 121 阅读 · 0 评论 -
LeetCode17-电话号码的字母组合
LeetCode17-电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。...原创 2019-02-20 15:03:21 · 169 阅读 · 0 评论 -
LeetCode33-搜索旋转排序数组
LeetCode33-搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [...原创 2019-03-05 20:19:07 · 338 阅读 · 0 评论 -
LeetCode28-实现strStr()
LeetCode28-实现strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack...原创 2019-03-02 20:20:12 · 178 阅读 · 0 评论 -
LeetCode20-有效的括号
LeetCode20-有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]&原创 2019-02-26 20:31:09 · 194 阅读 · 0 评论 -
LeetCode29-两数相除
LeetCode29-两数相除给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1:输入: dividend = 10, divisor = 3输出: 3示例 2:输入: dividend = 7, divisor = -3输出: -2说明...原创 2019-03-03 14:24:22 · 248 阅读 · 0 评论 -
LeetCode34-在排序数组中查找元素的第一个和最后一个位置
LeetCode34-在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 ...原创 2019-03-07 09:53:07 · 206 阅读 · 0 评论 -
LeetCode46-全排列
LeetCode46-全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]一、思路(一)可移动数这个方法需要记录每个数的移动方向(向左or向右),而且当最大数不能移动时,还要寻找下一个可移动的最大数,移动之...原创 2019-03-14 13:42:21 · 214 阅读 · 0 评论 -
LeetCode38-报数
LeetCode38-报数报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” ...原创 2019-03-09 20:22:53 · 123 阅读 · 0 评论 -
LeetCode47-全排列 II
LeetCode47-全排列 II给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]一、思路(一)回溯算法无重复的全排列可以使用回溯算法,那么有重复的可不可以呢?当然可以,只要使用集合去重即可!!!C++代码:class Solution {public: set...原创 2019-03-14 15:05:26 · 111 阅读 · 0 评论 -
LeetCode31-下一个排列
LeetCode31-下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1一、思路(一)移动数...原创 2019-03-04 19:19:55 · 142 阅读 · 0 评论 -
LeetCode48-旋转图像
LeetCode48-旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2]...原创 2019-03-14 20:43:06 · 248 阅读 · 0 评论 -
LeetCode49-字母异位词分组
LeetCode49-字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat",&qu原创 2019-03-15 14:49:49 · 140 阅读 · 0 评论 -
LeetCode50-Pow(x, n)
LeetCode50-Pow(x, n)实现 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=122=14=0.252^{-2} = \frac {1}{2^{2...原创 2019-03-15 15:50:54 · 157 阅读 · 0 评论 -
LeetCode56-合并区间
LeetCode56-合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5]...原创 2019-03-20 12:24:05 · 192 阅读 · 0 评论 -
LeetCode53-最大子序和
LeetCode53-最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。...原创 2019-03-16 14:22:36 · 82 阅读 · 0 评论 -
LeetCode35-搜索插入位置
LeetCode35-搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 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...原创 2019-03-08 10:01:28 · 132 阅读 · 0 评论