
LeetCode解析
文章平均质量分 85
本专栏专注于LeetCode解析,提供相关思路
沧海漂游_
这个作者很懒,什么都没留下…
展开
-
[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 = "aab", 返回 1 因为进行一次分割可以将字符串 s 分割成 ["aa","b"] 这样两个回文子串。题解这原创 2018-04-17 13:48:08 · 1367 阅读 · 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 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 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 · 4387 阅读 · 2 评论 -
[C++] LeetCode 31. 下一个排列
题目实现获取下一个排列函数,这个算法需要将数字重新排列成字典序中数字更大的排列。如果不存在更大的排列,则重新将数字排列成最小的排列(即升序排列)。修改必须是原地的,不开辟额外的内存空间。这是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解析获取下一个全排列,如果想偷懒可以直接用函...原创 2018-03-31 12:54:46 · 2272 阅读 · 0 评论 -
[C++] LeetCode 50. Pow(x, n)
题目实现 pow(x, n)。 示例 1: 输入: 2.00000, 10 输出: 1024.00000示例 2: 输入: 2.10000, 3输出: 9.26100解析这个题目有较多细节需要注意,容易导致错误。 1、n可能为负值,此时需要考虑取绝对值 2、由于n为有符号整型变量,范围为-2147483648~2147483647,取...原创 2018-04-01 11:16:16 · 680 阅读 · 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 137. 只出现一次的数字 II
题目给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次。求出那个只出现一次的数。 注意: 你的算法应该具有线性的时间复杂度。你能否不使用额外的内存来实现?代码使用位运算class Solution {public: int singleNumber(vector<int>& nums) { int res=0; ...原创 2018-04-04 22:05:39 · 450 阅读 · 0 评论 -
[C++] LeetCode 96. 不同的二叉查找树
题目给出 n,问由 1…n 为节点组成的不同的二叉查找树有多少种?例如, 给出 n = 3,则有 5 种不同形态的二叉查找树: 代码class Solution {public: int numTrees(int n) { vector<int> nums(n+1,0); nums[0]=1; for...原创 2018-04-10 02:02:34 · 583 阅读 · 0 评论 -
[C++] LeetCode 95. 不同的二叉查找树 II
题目给定一个整数 n,生成所有由 1…n 为节点组成的不同的二叉查找树。 例如, 给定 n = 3,则返回所有 5 种不同形态的二叉查找树: 题解这道题目其实也是一道动态规划的题目,以其中一个点为根节点,得到左子树根节点的集合和右子树根节点的集合,然后组合起来就是左右的可能情况代码/** * Definition for a binary tree node. *...原创 2018-04-10 02:05:41 · 879 阅读 · 0 评论 -
[C++] LeetCode 120. 三角形最小路径和
题目给出一个三角形(数据数组),找出从上往下的最小路径和。每一步只能移动到下一行中的相邻结点上。 比如,给你如下三角形: 则从上至下最小路径和为 11(即,2 + 3 + 5 + 1 = 11) 注意: 加分项:如果你可以只使用 O(n) 的额外空间(n是三角形的行数)。题解普通动态规划题目,注意每一行左右两端点只有一种路径,其他的都有两种路径。代码class ...原创 2018-04-10 02:09:05 · 397 阅读 · 0 评论 -
[C++] LeetCode 139. 单词拆分
题目给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,确定 s 是否可以被空格分割为一个或多个在字典里出现的单词。你可以假设字典中无重复的单词。 例如,给出 s = "leetcode", dict = ["leet", "code"]。返回 true 因为"leetcode" 可以被切分成 "leet code"。更新 (2017/1/4): wordD...原创 2018-04-10 02:14:39 · 1122 阅读 · 0 评论 -
[C++] LeetCode 152. 乘积最大子序列
题目找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 例如, 给定序列[2,3,-2,4], 其中乘积最大的子序列为 [2,3]其乘积为6。题解这题需要考虑到负数,用动态规划即可,但是要考虑到最大正数和最小负数,因为负数乘以最小负数可能为最大数,数组maxnum[i]和minnum[i]分别表示以i为结尾的数组最大乘积和最小乘积。代码class Soluti...原创 2018-04-10 02:17:44 · 1017 阅读 · 0 评论 -
[C++] LeetCode 213. 打家劫舍 II
题目注意事项: 这是 打家劫舍 的延伸。 在上次盗窃完一条街道之后,窃贼又转到了一个新的地方,这样他就不会引起太多注意。这一次,这个地方的所有房屋都围成一圈。这意味着第一个房子是最后一个是紧挨着的。同时,这些房屋的安全系统与上次那条街道的安全系统保持一致。 给出一份代表每个房屋存放钱数的非负整数列表,确定你可以在不触动警报的情况下盗取的最高金额。题解由于是一个环形,所以需要考虑到第...原创 2018-04-10 02:20:00 · 595 阅读 · 0 评论 -
[C++] LeetCode 91. 解码方法
题目包含 A-Z 的字母的消息通过以下规则编码: 给定一个包含数字的编码消息,请确定解码方法的总数。 例如, 给定消息为 "12", 它可以解码为 "AB"(1 2)或 "L"(12)。 "12" 的解码方法为 2 种。题解这道题用动态规划,很好解决。但是细节很多需要考虑到位,比如存在不能解码的情况如: 0,100,130等,然后需要注意的case:10,27,102等代...原创 2018-04-10 02:23:55 · 604 阅读 · 0 评论 -
[C++] LeetCode 322. 零钱兑换
题目给定不同面额的硬币(coins)和一个总金额(amount)。写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合方式能组成总金额,返回-1。 示例 1: coins = [1, 2, 5], amount = 11 return 3 (11 = 5 + 5 + 1)示例 2: coins = [2], amount = 3 return -1.注...原创 2018-04-10 11:48:36 · 3739 阅读 · 0 评论 -
[C++] LeetCode 309. Best Time to Buy and Sell Stock with Cooldown
题目Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy ...原创 2018-04-10 12:25:39 · 252 阅读 · 0 评论 -
[C++] LeetCode 338. Bit位计数
题目给定一个非负整数 num。 对于范围 0 ≤ i ≤ num 中的每个数字 i ,计算其二进制数中的1的数目并将它们作为数组返回。 示例: 比如给定 num = 5,应该返回 [0,1,1,2,1,2]. 进阶: 给出时间复杂度为O(n * sizeof(integer))的解答非常容易。 但是你可以在线性时间O(n)内用一次遍历做到吗? 要求算法的空间复杂度为O(n)。 你能...原创 2018-04-10 13:39:35 · 473 阅读 · 0 评论 -
[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 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 · 661 阅读 · 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 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 17. 电话号码的字母组合
题目给定一个数字字符串,返回数字所有可能表示的字母组合。 下面给出数字到字母的映射(和电话号码一样)。 输入:数字字符串 “23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明: 尽管上面的答案是按字典序排列的,但是你的答案可以是任何顺序。代码class Solution {public:...原创 2018-03-31 11:37:03 · 2432 阅读 · 2 评论 -
[c语言] leetcode 396. Rotate Function
Given an array of integers A and let n to be its length.Assume Bk to be an array obtained by rotating the array A k positions clock-wise, we define a "rotation function" F on A as follow:原创 2016-10-15 10:52:28 · 383 阅读 · 0 评论 -
[C语言]Leetcode 189 Rotate Array
Rotate Array Rotate an array of n elements to the right by k steps.For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].void rotate(int* nums, int numsSize, int k原创 2016-10-15 00:30:34 · 371 阅读 · 0 评论 -
[C语言] leetcode 118. Pascal's Triangle
Given numRows, generate the first numRows of Pascal's triangle.For example, given numRows = 5,Return[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]/** * Return an array of arra原创 2016-10-15 15:47:17 · 687 阅读 · 0 评论 -
[C语言] leetcode 119. Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1]./** * Return an array of size *returnSize. * Note: The returned array must be malloc原创 2016-10-17 15:08:40 · 713 阅读 · 0 评论 -
[C语言] leetcode 66. Plus One
题目:Given a non-negative number represented as an array of digits, plus one to the number.The digits are stored such that the most significant digit is at the head of the list.题目解释:先解释一原创 2016-10-17 16:00:55 · 608 阅读 · 0 评论 -
【C语言】leetcode 67. Add Binary
题目:Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".解答:char* addBinary(char* a, char* b) { int flag = 0; int tempa, tem原创 2016-11-30 20:55:21 · 1660 阅读 · 0 评论 -
【C语言】 leetcode 165. Compare Version Number
题目:Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 version2 return -1, otherwise return 0.You may assume that the version strings are non-emp原创 2016-12-09 20:02:14 · 350 阅读 · 0 评论 -
【C语言】 leetcode 453. Minimum Moves to Equal Array Elements
题目Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.Example:Input:[1,原创 2017-01-05 18:52:34 · 422 阅读 · 0 评论 -
【C语言】 LeetCode 326 Power of Three
题目Given an integer, write a function to determine if it is a power of three.Follow up:Could you do it without using any loop / recursion?方法一:由于整形存储有大小限制,利用其大小限制可以快速求解。(一般用32位,4个字节)原创 2017-01-06 13:45:09 · 369 阅读 · 0 评论 -
【C语言】 LeetCode 151. Reverse Words in a String
题目:Given an input string, reverse the string word by word.For example,Given s = "the sky is blue",return "blue is sky the".Update (2015-02-12):For C programmers: Try to solve it in原创 2017-01-06 13:54:35 · 968 阅读 · 0 评论 -
【C语言】LeetCode 165. Compare Version Numbers
题目:Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 version2 return -1, otherwise return 0.You may assume that the version strings are non-emp原创 2017-01-06 13:56:26 · 401 阅读 · 0 评论