
Leetdode
文章平均质量分 77
沧海漂游_
这个作者很懒,什么都没留下…
展开
-
[C++] LeetCode 392. 判断子序列
题目给定字符串 s 和 t ,判断 s 是否为t的子序列。 你可以认为 s 和t中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 示例 1: s...原创 2018-04-11 14:13:14 · 2108 阅读 · 0 评论 -
[C++] LeetCode 493. 翻转对
题目给定一个数组 nums ,如果 i < j且 nums[i] > 2*nums[j]我们就将 (i, j)称作一个重要翻转对。 你需要返回给定数组中的重要翻转对的数量。 示例 1: 示例 2: 注意: 1. 给定数组的长度不会超过50000。 2. 输入数组中的所有数字都在32位整数的表示范围内。题解这道题目用树状数组加上hash来做。关于树...原创 2018-05-03 12:21:34 · 1847 阅读 · 0 评论 -
[C++] LeetCode 315. 计算右侧小于当前元素的个数
题目给定一个整型数组 nums,按要求返回一个新的 counts 数组。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于nums[i] 的元素的数量。 例子: 返回数组 [2, 1, 1, 0].题解用树状数组(lowbit),然后倒序遍历原始数组即可代码class Solution {public: int ...原创 2018-05-03 12:24:32 · 2475 阅读 · 1 评论 -
[C++] LeetCode 116. 填充同一层的兄弟节点
题目给定一个二叉树 填充它的每个 next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next指针都被设置为 NULL。 说明:你只能使用额外常数空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。你可以假设它是一个完美二叉树(即所有叶子节点都在同一层,每个父节点都有两...原创 2018-05-04 15:59:55 · 545 阅读 · 0 评论 -
[C++] LeetCode 117. 填充同一层的兄弟节点 II
题目给定一个二叉树 填充它的每个 next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 说明: 1. 你只能使用额外常数空间。 2. 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。 示例: 给定二叉树, 调用你的函数后,该二叉树变...原创 2018-05-04 16:19:49 · 821 阅读 · 0 评论 -
[C++] LeetCode 41. 缺失的第一个正数
题目给定一个未排序的整数数组,找出其中没有出现的最小的正整数。 示例 1: 示例 2: 示例 3: 说明: 你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。题解这道题直接做其实不难,难就难在时间复杂度为O(n),同时还要求常数级别的空间。 考虑交换数组中数字位置,由于本题只要求正整数,所以考虑用索引为i的位置存储数字i+1,那么只要遍历一遍,进...原创 2018-04-26 22:46:54 · 1133 阅读 · 0 评论 -
[C++] LeetCode 560. 和为K的子数组
题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。解法一用一个数组累计求和,然后进行遍历就可以了,直接上代码class Solution {public: in...原创 2018-04-27 00:29:37 · 3267 阅读 · 0 评论 -
[C++] LeetCode 215. 数组中的第K个最大元素
题目在未排序的数组中找到第 k 个最大的元素。请注意,它是数组有序排列后的第 k 个最大元素,而不是第 k个不同元素。 例如, 给出 [3,2,1,5,6,4]和k = 2,返回 5。 注意事项: 你可以假设 k 总是有效的,1 ≤ k ≤数组的长度。方法一直接排序,然后取出第K大即可 代码:class Solution {public: int fin...原创 2018-04-27 20:01:04 · 4386 阅读 · 2 评论 -
[C++] LeetCode 407. 接雨水 II
题目给定一个m x n的矩阵,其中的值均为正整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。 说明: m 和 n 都是小于110的整数。每一个单位的高度都大于0 且小于 20000。 示例: 如上图所示,这是下雨前的高度图[[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 的状态。 下雨后,雨水将会被存储在这些...原创 2018-05-18 21:48:11 · 1242 阅读 · 1 评论 -
[C++] LeetCode 57. 插入区间
题目给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 输入: intervals = [[1,3],[6,9]], newInterval = [2,5] 输出: [[1,5],[6,9]]示例 2: 输入: intervals = [[1,2],...原创 2018-07-08 15:45:52 · 544 阅读 · 0 评论 -
[C++] LeetCode 236. 二叉树的最近公共祖先
题目给定一棵二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义: “对于有根树T的两个结点u、v,最近公共祖先表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。”(一个节点也可以是它自己的祖先) 例如,节点5和节点1的最近公共祖先是节点3;节点5和节点4的最近公共祖先是节点5,因为根据定义,一个节点可以是它自己的祖先。题解这道题应该是面试常...原创 2018-04-23 13:13:59 · 3733 阅读 · 0 评论 -
[C++] LeetCode 137. 只出现一次的数字 II
题目给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次。求出那个只出现一次的数。 注意: 你的算法应该具有线性的时间复杂度。你能否不使用额外的内存来实现?代码使用位运算class Solution {public: int singleNumber(vector<int>& nums) { int res=0; ...原创 2018-04-04 22:05:39 · 449 阅读 · 0 评论 -
[C++] LeetCode 97. 交错字符串
题目给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。 例如, 给定: s1 ="aabcc", s2 = "dbbca", 当 s3 = "aadbbcbcac", 返回 true. 当 s3 = "aadbbbaccc", 返回 false.题解这题可以考虑用动态规划来解。dp(i,j)表示s1的前原创 2018-04-12 01:12:11 · 938 阅读 · 0 评论 -
[C++] LeetCode 140. 单词拆分 II
题目给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字串中增加空格来构建一个句子,使得句子里所有的单词都在词典中。你可以假设字典中无重复的单词。 返回所有这些可能的句子。 例如,给出 s = "catsanddog", dict = ["cat", "cats", "and", "sand", "dog"]. 答案为 ["cats and原创 2018-04-17 12:47:29 · 1123 阅读 · 0 评论 -
[C++] LeetCode 132. 分割回文串 II
题目给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 符合要求的的最少分割次数。 例如,给出 s = &amp;amp;quot;aab&amp;amp;quot;, 返回 1 因为进行一次分割可以将字符串 s 分割成 [&amp;amp;quot;aa&amp;amp;quot;,&amp;amp;quot;b&amp;amp;quot;] 这样两个回文子串。题解这原创 2018-04-17 13:48:08 · 1366 阅读 · 0 评论 -
[C++] LeetCode 84. 柱状图中最大的矩形
题目给出 n 个非负整数来表示柱状图的各个柱子的高度,每个柱子紧挨彼此,且宽度为 1 。 您的函数要能够求出该柱状图中,能勾勒出来的最大矩形的面积。 示例: 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的各个高度为 [2,1,5,6,2,3]。 图中阴影部分为最大矩形面积,其面积为 10 个单位。 所以,您的函数给定高度是 [2,1,5,6,2,3] 的话,则返回 10...原创 2018-04-17 14:15:07 · 8914 阅读 · 0 评论 -
[C++] LeetCode 85. 最大矩形
题目给定一个填充了 0 和 1 的二进制矩阵,找到最大的只包含 1 的矩形并返回其面积。 例如,给出以下矩阵: 返回6题解这道题可以参考LeetCode 84. 柱状图中最大的矩形,这道题,那么这里每一行维持一个数组,记录当前矩阵的高度,然后就可以采用84. 柱状图中最大的矩形的方法计算出当前层最大面积,逐层下去,就可以得出最大值 84. 柱状图中最大的矩形求解过程可以参考8...原创 2018-04-17 14:21:45 · 1356 阅读 · 0 评论 -
[C++] LeetCode 32. 最长有效括号
题目给一个只包含'('和')'的字符串,找出最长的有效(正确关闭)括号子串的长度。 对于 &quot;(()&quot;,最长有效括号子串为 &quot;()&quot;,它的长度是 2。 另一个例子 &quot;)()())&quot;,最长有效括号子串为 &quot;()()&quot;,它的长度是4。题解这道题可以考虑用栈来实现,这样一次遍历就可以OK了。假定原创 2018-04-11 21:33:01 · 689 阅读 · 0 评论 -
[C++] LeetCode 115. 不同子序列
题目给定一个字符串 S和一个字符串T,求 S的不同的子序列中 T 出现的个数。 一个字符串的一个子序列是指:通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(譬如,"ACE"是"ABCDE"的一个子序列,而"AEC" 不是) 下面是一个例子: S = "rabbbit", T = "rabbit" 返回 3.题解这类题主要就是DFS或者动态规划来解决。...原创 2018-04-11 22:09:49 · 660 阅读 · 0 评论 -
[C++] LeetCode 78. 子集
题目给定一组不同的整数 nums,返回所有可能的子集(幂集)。 注意事项:该解决方案集不能包含重复的子集。 例如,如果 nums = [1,2,3],结果为以下答案:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]解析这题可以直接用DFS来做,比较直接,也相对简单。还可以考虑用位运算,将i转换...原创 2018-04-04 21:51:42 · 514 阅读 · 0 评论 -
[C++] LeetCode 123. 买卖股票的最佳时机 III
题目假设你有一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来找到最大的利润。你最多可以完成两笔交易。 注意: 你不可同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。题解这题要求可以交易一至两次。 先用一个数组maxNum[i]表示从第i天到最后一天的最大交易价格。 那么以第i天为交易点,维护一个变量保存前i-1天最低价格,考虑买入或卖出...原创 2018-04-11 22:38:38 · 780 阅读 · 1 评论 -
[C++] LeetCode 72. 编辑距离
题目给出两个单词 word1 和 word2,找出将 word1 转换成word2所使用的最少的步骤数 (每个操作记为一步)。 你可以对一个单词进行以下三种操作: a) 插入一个字符 b) 删除一个字符 c) 替换一个字符题解这题考虑直接用动态规划来解决了。代码class Solution {public: int minDistance(stri...原创 2018-04-11 23:03:15 · 402 阅读 · 0 评论 -
[C++] LeetCode 74. 搜索二维矩阵
题目编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。示例 1: 输入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] targ...原创 2018-07-08 16:08:59 · 709 阅读 · 0 评论 -
【C++】 LeetCode 240. 搜索二维矩阵 II
题目编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22...原创 2018-07-08 16:12:37 · 2020 阅读 · 2 评论 -
[C++] LeetCode 354. 俄罗斯套娃信封问题
题目给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明: 不允许旋转信封。示例: 输入: envelopes = [[5,4],[6,4],[6,7],[...原创 2018-08-15 23:06:10 · 1610 阅读 · 0 评论 -
[C++] LeetCode 174. 地下城游戏
题目一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数...原创 2018-08-16 00:08:51 · 744 阅读 · 0 评论 -
[C++] LeetCode 718. 最长重复子数组
题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3解释: 长度最长的公共子数组是 [3, 2, 1]。 说明: 1 <= len(A), len(B) <= 1000 0 <= A[i], B[i] < 1...原创 2018-08-16 23:31:53 · 846 阅读 · 0 评论 -
[C++] LeetCode 436. 寻找右区间
题目给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”。对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为“右侧”区间。如果区间 j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。注意: 你可以假设区间的终点总是大于它...原创 2018-08-17 00:49:25 · 710 阅读 · 0 评论 -
[C++] LeetCode 287. 寻找重复数
题目给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 ...原创 2018-09-04 15:12:27 · 788 阅读 · 0 评论 -
[C++] LeetCode 295. 数据流的中位数
题目中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构: void addNum(int num)- 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。 示...原创 2018-08-30 15:49:42 · 1073 阅读 · 0 评论 -
[C++] LeetCode 200. 岛屿的个数
题目给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1: 输入: 11110 11010 11000 00000 输出: 1示例 2: 输入: 11000 11000 00100 ...原创 2018-09-06 23:50:40 · 2528 阅读 · 0 评论 -
LeetCode题解汇总
LeetCode题解汇总LeetCode题解总结目录,C++语言 题号 题目 难度 解析连接 5 最长回文子串 medium C++ 17 电话号码的字母组合 medium C++ 31 下一个排列 medium C++ 32 最长有效括号 hard C++ 41 缺失的第一个...原创 2018-09-10 20:38:08 · 1138 阅读 · 0 评论 -
[C++] LeetCode 23. 合并K个排序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6方法一这题可以考虑用二路归并排序,也就是分治法,两两一组合并,最终得到有序的链表。代码/** * Definiti...原创 2018-09-23 14:09:28 · 1102 阅读 · 0 评论 -
[C++] LeetCode 300. 最长上升子序列
题目给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。 进阶: 你能将算法的时间复杂度降低到 O(n ...原创 2018-08-15 22:58:37 · 2284 阅读 · 4 评论 -
[C++] LeetCode 187. Repeated DNA Sequences
题目All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: “ACGAATTCCG”. When studying DNA, it is sometimes useful to identify repeated sequences within the DNA. W...原创 2018-04-04 22:45:28 · 595 阅读 · 1 评论 -
[C++] LeetCode 378. 有序矩阵中第K小的元素
题目给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。 请注意,它是排序后的第k小元素,而不是第k个元素。 示例: matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, 返回 13。说明: 你可以假设k 的值永远...原创 2018-07-15 18:16:45 · 3091 阅读 · 0 评论 -
[C++] LeetCode 二叉树的前序、中序、后序遍历
题目二叉树的前序、中序、后序遍历,采用递归和非递归写法。 具体题目见: 二叉树前序遍历https://leetcode-cn.com/problems/binary-tree-preorder-traversal/description/ 二叉树中序遍历(https://leetcode-cn.com/problems/binary-tree-inorder-traversal/desc...原创 2018-07-18 00:22:15 · 1230 阅读 · 0 评论 -
[C++] LeetCode 42. 接雨水
题目给定n 个非负整数表示每个宽度为 1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6思路解析这道...原创 2018-07-12 23:00:24 · 3870 阅读 · 0 评论 -
[C++] LeetCode 135. 分发糖果
题目老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢? 示例 1: 输入: [1,0,2] 输出: 5 解释: 你可以分别给这三个孩子分发...原创 2018-07-12 23:51:22 · 1508 阅读 · 0 评论 -
[C++] LeetCode 148. 排序链表
题目在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4示例 2: 输入: -1->5->3->4->0 输出: -1->0->3->4->5思路解析这题可以采用两种方法,原创 2018-07-07 22:44:53 · 960 阅读 · 0 评论