刷题记录
文章平均质量分 69
LeetCode等刷题记录
空谷-幽兰
一念静心,花开遍世界!
展开
-
&LeetCode0240&搜索一个二维数组之二
题目编写一个高效的算法来搜索 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,返回 true。给定 target原创 2020-08-18 01:02:02 · 138 阅读 · 0 评论 -
&LeetCode0215&数组中的第K个最大元素
leetcode原创 2020-05-16 18:28:52 · 132 阅读 · 0 评论 -
&LeetCode0110& 平衡二叉树
题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]1/ 2 2/ ...原创 2020-04-11 13:17:46 · 85 阅读 · 0 评论 -
&LeetCode0083& 删除排序链表中的重复元素
题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)思路遍历整个链表,将每个结点和其后面的结点比较,如果结点值相同,将前面结点的 next 指针跳过紧挨着的相同...原创 2020-04-01 17:49:38 · 104 阅读 · 0 评论 -
&LeetCode0066& 加一
题目给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。...原创 2020-04-01 17:28:09 · 91 阅读 · 0 评论 -
&LeetCode0058& 最后一个单词的长度
题目给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0 。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: “Hello World”输出: 5来源:力扣(LeetCode)思路只关注最后一个单词的长度,所以从字符串末尾开...原创 2020-04-01 17:06:01 · 71 阅读 · 0 评论 -
&LeetCode0038& 外观数列
题目「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整数 n(1 ≤...原创 2020-03-31 23:07:16 · 109 阅读 · 0 评论 -
&LeetCode0093& 复原IP地址
题目给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]来源:力扣(LeetCode)思路两个经验:第一,凡是字符串的子序列或配准问题应考虑动态规划DP,第二,需要求出所有可能情况首先考虑用递归。首先,这道题符合第二种情况,所以我们要用递归来解...原创 2020-03-25 22:34:16 · 103 阅读 · 0 评论 -
&LeetCode0042& 接雨水
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路基于动态规划(Dynamic Programming)的...原创 2020-03-16 21:03:50 · 105 阅读 · 0 评论 -
&LeetCode0019& 删除链表的倒数第N个节点
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?来源:力扣(LeetCode)思路首先,要考虑的是,如何找到倒数第N个...原创 2020-03-16 09:48:47 · 99 阅读 · 0 评论 -
&LeetCode0016& 最接近的三数之和
题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).来源:力扣(LeetCode)思路...原创 2020-03-16 09:28:00 · 89 阅读 · 0 评论 -
&LeetCode0008& 字符串转换整数 (atoi)
题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...原创 2020-03-08 22:55:54 · 87 阅读 · 0 评论 -
&LeetCode0015& 三数之和
题目给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]来源:力扣(LeetCode...原创 2020-03-06 23:53:38 · 122 阅读 · 0 评论 -
&LeetCode0394& 字符串解码
题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4...原创 2020-03-05 18:09:28 · 151 阅读 · 0 评论 -
&LeetCode0043& 字符串相乘
题目给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1 和 num2 的长度小于110。num1 和 num2...原创 2020-03-05 17:00:25 · 99 阅读 · 0 评论 -
&LeetCode0010& 正则表达式匹配
题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”p...原创 2020-03-04 18:18:36 · 134 阅读 · 0 评论 -
&LeetCode0722& 删除注释
题目给一个 C++ 程序,删除程序中的注释。这个程序source是一个数组,其中source[i]表示第i行源码。 这表示每行源码由\n分隔。在 C++ 中有两种注释风格,行内注释和块注释。字符串// 表示行注释,表示//和其右侧的其余字符应该被忽略。字符串/* 表示一个块注释,它表示直到*/的下一个(非重叠)出现的所有字符都应该被忽略。(阅读顺序为从左到右)非重叠是指,字符串/*/并没有...原创 2020-03-02 11:48:35 · 173 阅读 · 0 评论 -
&LeetCode0004& 寻找两个有序数组的中位数
题目给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (...原创 2020-03-01 18:15:07 · 102 阅读 · 0 评论 -
&LeetCode0002& 两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&...原创 2020-03-01 16:54:10 · 87 阅读 · 0 评论 -
&LeetCode0003& 无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是...原创 2020-03-01 09:21:34 · 96 阅读 · 0 评论 -
&LeetCode0005& 最长回文子串
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)思路马拉车算法(Manacher’s Algorithm)C++代码class Solution {publ...原创 2020-02-29 22:13:39 · 67 阅读 · 0 评论 -
&LeetCode820& 单词的压缩编码
题目给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。例如,如果这个列表是 [“time”, “me”, “bell”],我们就可以将其表示为 S = “time#bell#” 和 indexes = [0, 2, 5]。对于每一个索引,我们可以通过从字符串 S 中索引的位置开始读取字符串,直到 “#” 结束,来恢复我们之前的单词列表。那么成功对给定单词列表进行...原创 2020-02-29 17:50:19 · 147 阅读 · 0 评论 -
&LeetCode260& 只出现一次的数字 III
题目给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。示例 :输入: [1,2,1,3,2,5]输出: [3,5]注意:结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?来源:力扣(LeetCode)思路首先,将其全部位进行 ‘异或...原创 2020-02-29 16:47:41 · 92 阅读 · 0 评论 -
&LeetCode137& 只出现一次的数字 II
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例 2:输入: [0,1,0,1,0,1,99]输出: 99来源:力扣(LeetCode)思路C++代码...原创 2020-02-29 11:10:39 · 94 阅读 · 0 评论 -
&LeetCode371& 两整数之和
题目不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1来源:力扣(LeetCode)思路考虑迭代的思路C++代码class Solution {public: int getSum(int a, int b) ...原创 2020-02-27 17:57:52 · 153 阅读 · 0 评论 -
&LeetCode784& 字母大小写全排列
题目给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入: S = “a1b2”输出: [“a1b2”, “a1B2”, “A1b2”, “A1B2”]输入: S = “3z4”输出: [“3z4”, “3Z4”]输入: S = “12345”输出: [“12345”]注意:S 的长度不超过12。S 仅由...原创 2020-02-27 17:39:43 · 184 阅读 · 0 评论 -
&LeetCode36& 有效的数独
题目判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。示例 1:输入:输出: true示例 2:输入:输出: fa...原创 2020-02-27 16:00:45 · 115 阅读 · 0 评论 -
&LeetCode401& 二进制手表
题目二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。例如,上面的二进制手表读取 “3:25”。给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。案例:输入: n = 1返回: [“1:00”, “2:00”, “4:00”, “8:00”, “0:01”, ...原创 2020-02-26 23:12:01 · 152 阅读 · 0 评论 -
&LeetCode145& 二叉树的后序遍历
题目给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]12/3输出: [3,2,1]来源:力扣(LeetCode)思路后序遍历的顺序是左-右-根;首先,先将先序遍历的根-左-右顺序变为根-右-左,再翻转变为后序遍历的左-右-根,翻转还是改变结果 res 的加入顺序,然后把更新辅助结点p的左右顺序换一下即可。C++代码class Solutio...原创 2020-02-26 16:56:37 · 181 阅读 · 0 评论 -
&LeetCode144& 二叉树的前序遍历
题目给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3]12/3输出: [1,2,3]来源:力扣(LeetCode)思路二叉树的中序遍历顺序为左-根-右;使用栈的解法:首先,从根节点开始,先将根节点压入栈;然后,再将其所有右子结点压入栈,然后取出栈顶节点,保存节点值;其次,再将当前指针移到其左子节点上,若存在左子节点,则在下次循环时又可将其所有左...原创 2020-02-26 16:42:31 · 102 阅读 · 0 评论 -
&LeetCode94& 二叉树的中序遍历
题目给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]来源:力扣(LeetCode)思路二叉树的中序遍历顺序为左-根-右;使用栈的解法:首先,从根节点开始,先将根节点压入栈;然后,再将其所有左子结点压入栈,然后取出栈顶节点,保存节点值;其次,再将当前指针移到其右子节点上,若存在右子节点,则在下次循环时又可将其所有...原创 2020-02-26 16:13:30 · 85 阅读 · 0 评论 -
&LeetCode232& 用栈实现队列
题目使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.p...原创 2020-02-26 10:49:17 · 117 阅读 · 0 评论 -
&LeetCode225& 用队列实现栈
题目使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空注意:你只能使用队列的基本操作–也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者...原创 2020-02-26 10:01:19 · 84 阅读 · 0 评论 -
&LeetCode125& 最小栈
题目设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(...原创 2020-02-26 08:44:16 · 92 阅读 · 0 评论 -
&LeetCode125& 验证回文串
题目给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false来源:力扣(LeetCode)思路首先,需要建立两个指针,分别为left和right,开...原创 2020-02-25 22:07:05 · 81 阅读 · 0 评论 -
&LeetCode344& 反转字符串
题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“...原创 2020-02-25 17:52:23 · 93 阅读 · 0 评论 -
&LeetCode234& 回文链表
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true来源:力扣(LeetCode)思路首先,按顺序把所有的结点值都存入到一个栈 stack 里;然后,利用栈的后入先出的特性,可以按顺序从末尾取出结点值;此时,再遍历一遍链表,就可以比较回文对应位置;最后,如果值不同直接返...原创 2020-02-25 17:23:56 · 168 阅读 · 0 评论 -
&LeetCode88& 合并两个有序数组
题目给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 =...原创 2020-02-25 16:33:54 · 210 阅读 · 2 评论 -
&LeetCode102& 二叉树的层次遍历
题目从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]提示:节点总数 <= 1000来源:力扣(LeetCode)思路首先,可以建立一个 queue(队列);然后,把根...原创 2020-02-25 15:57:00 · 110 阅读 · 0 评论 -
&LeetCode690& 员工的重要性
题目给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结...原创 2020-02-25 11:18:52 · 206 阅读 · 0 评论