
Leetcode
leetcode
镇长1998
菜鸟升级。
展开
-
LeetCode 215. 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4链接:https://leetcode-cn.com/problems/kth-larges...原创 2019-08-15 12:43:19 · 110 阅读 · 0 评论 -
LeetCode 80. 删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。链接:????1. 使用了Vector的erase方法来进行原地删除, 但是看到更好的方法是判断nums[k] 与 nums[k-2]相不相同2. vector在erase某个位置的元素之后, 后面的元素会相应的前进一格class Solution {public:原创 2021-04-06 13:26:03 · 124 阅读 · 0 评论 -
LeetCode 556. 下一个更大元素 III
给你一个正整数n ,请你找出符合条件的最小整数,其由重新排列 n中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。示例 1:输入:n = 12输出:21示例 2:输入:n = 21输出:-1提示:1 <= n <= 231 - 1链接:????1. 当n指定的数字进行降序排序时,组成的数是最小的2. 从低原创 2021-03-27 13:14:21 · 233 阅读 · 0 评论 -
LeetCode 1047. 删除字符串中的所有相邻重复项
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。链接:????原创 2021-03-09 11:53:44 · 131 阅读 · 0 评论 -
LintCode 680. 分割字符串
描述给一个字符串,你可以选择在一个字符或两个相邻字符之后拆分字符串,使字符串由仅一个字符或两个字符组成,输出所有可能的结果样例样例1输入: "123"输出: [["1","2","3"],["12","3"],["1","23"]]本题是 求字符串的所有分割方式, 和 LeetCode 139题思路相同要求每个拆分的子串最多两个字符,只需要在原本求所有分割方式的基础上判断下,只有当分割子字符串长度<=2,才会递归class Solution {public:原创 2021-03-07 23:46:17 · 169 阅读 · 0 评论 -
LeetCode 131. 分割回文串
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = "aab"输出:[["a","a","b"],["aa","b"]]示例 2:输入:s = "a"输出:[["a"]]提示:1 <= s.length <= 16s 仅由小写英文字母组成链接:????本题基本就是 字符串的所有分割方式只需要在字符串的所有分割结果中判断该分割结果是不是都原创 2021-03-07 23:07:46 · 319 阅读 · 0 评论 -
LeetCode 503. 下一个更大元素 II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。注意: 输入数组的长度不会超过 10000。链接:???原创 2021-03-06 13:23:02 · 151 阅读 · 0 评论 -
求滑动窗口中的最大值和最小值
滑动窗口: 一般使用双指针算法,左指针l和右指针r之间的空间称为窗口,由于指针是不断移动的,从而窗口也可以移动,称为滑动窗口。滑动窗口的最值: 由于窗口是移动的,移动的过程中有新元素的加入也有旧元素的弹出。每一次元素的加入或弹出都可能使窗口中元素的最值发生变化,也正是会发生变化,使得无法直接获取任意时刻滑动窗口的最值。单调队列求滑动窗口最值: 虽然滑动窗口中不断有新元素加入和旧元素弹出,但是始终都有一个特点就是新元素都是从右指针r处加入的,旧元素都是从左指针l处弹出的。当一个元素如果是当前..原创 2021-02-21 13:19:08 · 1805 阅读 · 0 评论 -
LeetCode 856. 括号的分数
给定一个平衡括号字符串S,按下述规则计算该字符串的分数:() 得 1 分。AB 得A + B分,其中 A 和 B 是平衡括号字符串。(A) 得2 * A分,其中 A 是平衡括号字符串。示例 1:输入: "()"输出: 1示例 2:输入: "(())"输出: 21. 从得分规则中可以看出来,得分的地方就是()才会得到分2. 因此字符串的分数就是()的分数的和3. 由于嵌套的()分数会 * 2,因此需要求出每对()的深度4. 将每个()的分数相加起来就对应...原创 2020-10-11 17:06:37 · 228 阅读 · 0 评论 -
LeetCode 1094 拼车
假设你是一位顺风车司机,车上最初有capacity个空座位可以用来载客。由于道路的限制,车只能向一个方向行驶(也就是说,不允许掉头或改变方向,你可以将其想象为一个向量)。这儿有一份乘客行程计划表trips[][],其中trips[i] = [num_passengers, start_location, end_location]包含了第 i 组乘客的行程信息:必须接送的乘客数量;乘客的上车地点;以及乘客的下车地点。这些给出的地点位置是从你的初始出发位置向前行驶到这些地点所需...原创 2020-10-11 15:30:40 · 362 阅读 · 0 评论 -
LeetCode 696. 计数二进制子串
给定一个字符串s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它们出现的次数。另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。链接:????1. 动原创 2020-10-09 13:53:47 · 126 阅读 · 0 评论 -
LeetCode 310. 最小高度树
对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。格式该图包含n个节点,标记为0到n - 1。给定数字n和一个无向边edges列表(每一个边都是一对标签)。你可以假设没有重复的边会出现在edges中。由于所有的边都是无向边, [0, 1]和[1, 0]是相同的,因此不会同时出在edges里。示例 1:输入: n...原创 2020-10-07 17:25:35 · 266 阅读 · 0 评论 -
LeetCode 114. 二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6class Solution {public: void flatten(TreeNode* root) { preoder(root); } ..原创 2020-10-04 16:12:20 · 135 阅读 · 0 评论 -
LeetCode 1525. 字符串的好分割数目
给你一个字符串s,一个分割被称为 「好分割」当它满足:将s分割成 2 个字符串p 和q,它们连接起来等于s且 p和 q中不同字符的数目相同。请你返回 s中好分割的数目。示例 1:输入:s = "aacaba"输出:2解释:总共有 5 种分割字符串 "aacaba" 的方法,其中 2 种是好分割。("a", "acaba") 左边字符串和右边字符串分别包含 1 个和 3 个不同的字符。("aa", "caba") 左边字符串和右边字符串分别包含 1 个和 3 个...原创 2020-09-29 20:34:59 · 203 阅读 · 0 评论 -
LeetCode 669. 修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界L和最大边界R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。示例 1:输入: 1 / \ 0 2 L = 1 R = 2输出: 1 \ 2链接:????class Solution {public: TreeNode* trimBST(TreeNode* root,...原创 2020-09-29 19:45:45 · 88 阅读 · 0 评论 -
LeetCode 861. 翻转矩阵后的得分
有一个二维矩阵A 其中每个元素的值为0或1。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b1111 =...原创 2020-09-13 15:08:27 · 113 阅读 · 0 评论 -
LeetCode 1448. 统计二叉树中好节点的数目
给你一棵根为root的二叉树,请你返回二叉树中好节点的数目。「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。示例 1:输入:root = [3,1,4,3,null,1,5]输出:4解释:图中蓝色节点为好节点。根节点 (3) 永远是个好节点。节点 4 -> (3,4) 是路径中的最大值。节点 5 -> (3,4,5) 是路径中的最大值。节点 3 -> (3,1,3) 是路径中的最大值。1. 求根节点到当前结点的最大..原创 2020-09-12 21:22:14 · 275 阅读 · 0 评论 -
LeetCode 1028. 从先序遍历还原二叉树
我们从二叉树的根节点 root开始进行深度优先搜索。在遍历中的每个节点处,我们输出D条短划线(其中D是该节点的深度),然后输出该节点的值。(如果节点的深度为 D,则其直接子节点的深度为 D + 1。根节点的深度为 0)。如果节点只有一个子节点,那么保证该子节点为左子节点。给出遍历输出S,还原树并返回其根节点root。示例 1:输入:"1-2--3--4-5--6--7"输出:[1,2,5,3,4,6,7]class Solution {public: v...原创 2020-09-12 14:48:41 · 246 阅读 · 0 评论 -
LeetCode 1351. 统计有序矩阵中的负数
给你一个m* n的矩阵grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。请你统计并返回grid中负数的数目。示例 1:输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]输出:8解释:矩阵中共有 8 个负数。暴力肯定就是O(m * n)对每一行进行二分查找,每次找出最左边第一个小于0的数,则该行之后的数都小于它,因为非增序排列。 时间复杂度O(m * log(n))class S...原创 2020-09-08 15:12:27 · 152 阅读 · 0 评论 -
LeetCode 274. H 指数
给定一位研究者论文被引用次数的数组(被引用次数是非负整数)。编写一个方法,计算出研究者的 h指数。h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。(其余的N - h篇论文每篇被引用次数不超过 h 次。)例如:某人的 h 指数是 20,这表示他已发表的论文中,每篇被引用了至少 20 次的论文总共有 20 篇。示例:输入:citations = [3,0,6,1,...原创 2020-09-03 15:46:39 · 159 阅读 · 0 评论 -
LeetCode 201. 数字范围按位与
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。示例 1:输入: [5,7]输出: 4示例 2:输入: [0,1]输出: 0链接:????1. 直接比较起始端点和终止端点的公共长度2. 因为公共的部分才可以保证相与之后不变化,非公共部分相与之后一定为0,因为之所以是非公共部分就说明不同,而二进制中只有0和1,因此说明非公共部分的每一位既出现了0也出现了1,则相与一定为0原创 2020-09-02 15:17:35 · 109 阅读 · 0 评论 -
LeetCode 81. 搜索旋转排序数组 II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。示例1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例2:输入: nums = [2,5,6,0,0,1,2], target = 3输出: falseclass Solutio...原创 2020-08-17 13:52:28 · 132 阅读 · 0 评论 -
LeetCode 33. 搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例2:输入: nums = [4,5,6,7,0,1,2], t...原创 2020-08-17 13:08:31 · 117 阅读 · 0 评论 -
LeetCode 137. 只出现一次的数字 II
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,3,2]输出: 3示例2:输入: [0,1,0,1,0,1,99]输出: 99链接:????位运算: 逐位的去统计每一位上的1的个数,对于给定数组,只有一个数出现了一次,其他数都出现了3次,那么对于每一位上的1的个数来说,要么是1的3倍,要么是1的3倍 +原创 2020-07-14 12:02:30 · 142 阅读 · 0 评论 -
LeetCode 129 求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个0-9的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明:叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 + 13 = ...原创 2020-07-13 10:54:21 · 114 阅读 · 0 评论 -
LeetCode 405. 数字转换为十六进制数(同理八进制)
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用补码运算方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。给定的数确保在32位有符号整数范围内。不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。示例 :输入:26输出:"1a"输入:-1输出:"ffffffff"链接:????原创 2020-07-12 15:08:59 · 265 阅读 · 0 评论 -
LeetCode 89. 格雷编码
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。示例 1:输入:2输出:[0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的n,其格雷编码序列并不唯一。例如,[0,2,3,1]也是一个有效的格雷编码序列。00 - 010 - 211 - 301 - 1链接:????.原创 2020-07-11 22:21:08 · 115 阅读 · 0 评论 -
LeetCode 31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1链接:????最大的排列是满足降序最小的排列是满足升序因此寻找后一个排列的操作是: 1. 从后遍历,寻找第一个升序的数,即 nums[k -原创 2020-07-10 10:33:47 · 110 阅读 · 0 评论 -
LeetCode 97. 交错字符串
给定三个字符串s1, s2, s3, 验证s3是否是由s1和s2 交错组成的。示例 1:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例2:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false链接:????class Solution {public: bool isInterleave(string s1, string ...原创 2020-07-09 23:45:17 · 188 阅读 · 0 评论 -
LeetCode 96. 不同的二叉搜索树
给定一个整数 n,求以1 ...n为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2...原创 2020-07-09 23:21:20 · 107 阅读 · 0 评论 -
LeetCode 205. 同构字符串
给定两个字符串s和t,判断它们是否是同构的。如果s中的字符可以被替换得到t,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = "egg", t = "add"输出: true示例 2:输入: s = "foo", t = "bar"输出: false示例 3:输入: s = "paper", t = "title"输出: true...原创 2020-07-09 18:16:41 · 104 阅读 · 0 评论 -
LeetCode 213. 打家劫舍 II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。示例 .原创 2020-07-09 17:34:43 · 101 阅读 · 0 评论 -
leetcode 面试题 08.05. 递归乘法
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。示例1:输入:A = 1, B = 10输出:10示例2:输入:A = 3, B = 4输出:12链接:????本题有一点比较有意思的地方: 由于使用递归实现乘法,那么递归层次越少当然越少,因此递归前,应当先判断下A和B的大小class Solution {public: int deep(int A, int B){ if (.原创 2020-07-08 09:14:46 · 299 阅读 · 0 评论 -
LeetCode 23. 合并K个排序链表
合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6链接:????1. 堆的形式存储k个链表的当前头结点2. 设置为小根堆3. 从堆中取出的链表结点ListNode,是可以继续使用next指针的。class Solution {public: struc...原创 2020-07-07 16:22:10 · 116 阅读 · 1 评论 -
LeetCode 18. 四数之和
给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]]答案中不可以包含重复的四元...原创 2020-07-03 17:02:18 · 125 阅读 · 0 评论 -
LeetCode 15. 三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]链接:????1. 排序,为双指针算法提供升序条件2. 确定一个指针,然后利用双指针来确定另外两个变量将j,k3. 双指...原创 2020-07-03 15:57:27 · 112 阅读 · 0 评论 -
LeetCode 240. 搜索二维矩阵 II
链接:https://leetcode-cn.com/problems/search-a-2d-matrix-ii本题的解题思路是Leetcode378. 有序矩阵中第K小的元素的解题思路的一部分class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.size() == 0) return false;..原创 2020-07-02 21:45:03 · 190 阅读 · 0 评论 -
LeetCode 476. 数字的补数
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。示例 1:输入: 5输出: 2解释: 5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。示例 2:输入: 1输出: 0解释: 1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。// 纯编程思维方式class Solution {public: int findComplement(int num) { int res = .原创 2020-07-01 11:37:46 · 116 阅读 · 0 评论 -
LeetCode 58. 最后一个单词的长度
给定一个仅包含大小写字母和空格' '的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: "Hello World"输出: 5链接:????class Solution {public: int lengthOfLastWord(string s) { string test;原创 2020-05-27 15:47:25 · 137 阅读 · 0 评论 -
LeetCode 11. 盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。链接:????初始左右边界为0和height.size()每次移动左右边界的时候,题目的答案...原创 2020-04-18 08:59:12 · 170 阅读 · 0 评论