
LeetCode
lwgkzl
海风和着歌声,星空伴着代码
展开
-
Longest Substring Without Repeating Characters (leetcode中等题 尺取法)
题目大意:找出一个字符串的子串,使得子串中没有相同字符,求能找到子串的最长长度。如abcbc最长就只有abc长度为三。解法:典型的双指针题目,声明两个指针i,j。先i从0开始往后扫,如果发现重复字符,计算此时的长度,然后固定i,往后移动指针j,使得不存在不存在重复字符为止。举例如下:对于字符串abacded,一开始i=0;j=0;然后开始扫描I,i=1,长度为2,没有重复字符。记录当前原创 2018-01-05 00:49:41 · 304 阅读 · 0 评论 -
leetcode 925. 长按键入
题目:两个字符串A,B,查询B是否可能是A中的某些字符重复多次形成的。思路:两个指针,一个指向字符串A,一个指向字符串B,如果B[I]==A[I],那么移动两个指针,否则一直移动i。如果指针j到了A的结尾,需要检查B是否后面的字符一直相同,即B多出的那一部分必须和A的最后一个字符相同。如果相同,则匹配。如果指针i到了B的结尾,判断是否已经到了A的结尾,如果没有,那么不匹配。...原创 2018-10-25 19:25:03 · 498 阅读 · 0 评论 -
leetcode 926. 将字符串翻转到单调递增(机智题)
题目:一个只有0,1组成的字符串,每一次操作可以把一个字符从0到1或者从1到0,求最少操作次数形成单调不减字符串思路:一开始用DP,果断超时。。。。。一直以为1s可以跑1e9,结果只能跑1e8因为只有两种形式的字符,到最后肯定后面部分是1,前面部分是0,当然可以全0全1的情况。那么我们只需要找到这个分界点,使得包括分界点左边全是0,右边全是1.怎么找分界点呢?我们可以统计前面部分1...原创 2018-10-25 19:35:19 · 683 阅读 · 0 评论 -
leetcode 927. 三等分(脑洞题)
题目:给一串01串,然后从中分开成三份,然后问有没有可能组成三个二进制是相同的。思路:看大佬的思路才做出来的。。。。一开始我都想用kmp了。。。。结果,二进制相同那么肯定1的个数是相同的。那么可以根据1的个数划分一个大概的界限。有了每个区间1的个数后,我们可以计算出:第一个区间的起点firone,第二个区间的起点firtwo,第三个区间的起点firthree。三个区间的最后...原创 2018-10-25 19:43:58 · 1046 阅读 · 0 评论 -
leetcode 928. 尽量减少恶意软件的传播 II(dfs或bfs)
题目:在节点网络中,只有当 graph[i][j] = 1 时,每个节点 i 能够直接连接到另一个节点 j。一些节点 initial 最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件感染。这种恶意软件的传播将继续,直到没有更多的节点可以被这种方式感染。假设 M(initial) 是在恶意软件停止传播之后,整个网络中感染恶意软件的...原创 2018-10-25 20:10:40 · 1463 阅读 · 1 评论 -
【leetcode 932】漂亮数组 Beautiful Array (构造)
题目:给定一个排列,要求给出其满足对于任意一个数A[k],使得i<k<j,2*A[k]!=A[i]+A[j].的一个排列思路:构造题,emmmm,emmmmmm先看一种简单的思路。 因为2*A[k]是偶数,如果要求2*A[K]!=A[I]+A[J]那么可以构造位置在A[k]左边的全部放奇数,位置在A[k]右边的全部放偶数。这样就保证了对于K位置而言,这个性...原创 2018-10-29 11:21:45 · 5638 阅读 · 2 评论 -
【leetcode931】 下降路径最小和(基础DP)
题目:一个矩阵,从上到下走一遍,只允许走相邻的列,然后每一个位置有一个权值,求经过路径的最小权值和。思路:基础DP了,dp[i][j]表示到达位置(i,j)所需要的花费的权值。那么他可以由三种状态转化而来。(i-1,j-1),(i-1,j),(i-1,j+1)就是上一列与其相邻列的三个位置。(注意边界的时候需要分类讨论)所以dp[i][j] = min(dp[i-1][j-1]...原创 2018-10-29 11:33:16 · 595 阅读 · 0 评论 -
【leetcode 929】独特的电子邮件地址
题目:对于一个字符串,如果出现.就省略,出现+就省略后面的字符串。思路:模拟代码:class Solution {public:string solve(string s){ int index = s.find('@'); int len = s.length(); string last = s.substr(index,len-index);...原创 2018-10-29 11:35:48 · 1967 阅读 · 0 评论 -
leetcode392. 判断子序列
题目:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 ...原创 2018-10-27 19:18:06 · 1431 阅读 · 0 评论 -
leetcode 952. 按公因数计算最大组件大小 (素数筛法+并查集)
题意:给一串数,每一个数代表图的一个节点,然后两个数之间有除1之外的公因数表示这两个节点之间有边相连,求最大连通图。做法:如果平方找数两两之间是否存在公因数肯定超时,如果要判断两个数是否有公因数,只需要判断有没有含有相同的素数就可以了。那么我们可以对每一个数进行一个归类,含有2的数,含有3的数,含有5的数,含有7的数。。。等等对于都含有公因子2的数,那么肯定都相连。对于含有3的...原创 2018-12-04 20:39:46 · 1360 阅读 · 0 评论 -
leetcode 962. 最大宽度坡(坐标系思路转换+简单DP)
题意:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j]。这样的坡的宽度为 j - i。求最大坡思路:简化一下,就是找两个数,A[I],A[J],然后当A[J]>A[I]时,找最大的J-I初看不好下手,一个是数值上的比较,一个是坐标的比较。可以想到一种暴力的思路:遍历每个当前的数,找之后最远的大于当前数的数字,这样子...原创 2018-12-23 13:02:03 · 792 阅读 · 0 评论 -
[Leetcode 963] 最小面积矩形 II
题意:平面坐标系中一些点,找四个拼成面积在最小的矩形。思路:长方形判定定理:对角线相等,且互相平分的四边形是矩形。首先平方枚举两个点所构成的所有线段。对于这些线段把它们当做长方形的一条对角线,确定了这条对角线之后。枚举第三个点,首先判断第三个点到对角线中点的距离是不是满足对角线长度的一半,(比较距离)然后判断,与这三个点构成矩形的第四个点是不是存在:讲解一 如果以上...原创 2018-12-23 13:13:06 · 1568 阅读 · 0 评论 -
【leetcode 966】 元音拼写检查器
题目:在给定单词列表 wordlist 的情况下,我们希望实现一个拼写检查器,将查询单词转换为正确的单词。对于给定的查询单词 query,拼写检查器将会处理两类拼写错误:大小写:如果查询匹配单词列表中的某个单词(不区分大小写),则返回的正确单词与单词列表中的大小写相同。 例如:wordlist = ["yellow"], query = "YellOw": correct = "y...原创 2018-12-30 12:19:02 · 629 阅读 · 0 评论 -
leetcode 116. 填充同一层的兄弟节点(递归思想)
题意:给一颗完美二叉树,加一个next节点,使得next节点指向自己同层次的右边的那个节点。思路:当前节点的左子节点--》当前节点的右子节点如果当前节点有兄弟节点,即:如果当前节点的next非空,那么我们当前节点的右子节点的next就是 当前节点-》next-》left。这样通过一个简单的递归就可以解决了。注意开始判空。代码:class Solution {pu...原创 2019-01-05 16:50:56 · 178 阅读 · 0 评论 -
【leetcode 969】 煎饼排序(选择排序)
题意:给定一个序列,每次只允许翻转序列的前K个元素,求一个翻转的序列K,使得原序列有序。思路:一开始真心没有思路。参照选择排序的思路,每次找到当前序列的最大值X,然后翻转两次把X放到最后面就行了。最多需要翻转2*N次。怎么样两次把最大值放到后面呢,假设最大值在index,先翻转index,那么最大值就到了第一个,在翻转未排好序的部分,那么未排好序的部分的最大值就到了未排好序的最...原创 2019-01-06 12:18:12 · 1758 阅读 · 1 评论 -
【leetcode 971】 翻转二叉树以匹配先序遍历
题意:给定一个先序遍历序列,给出一棵树,问能否通过翻转改树的某些左右子节点,使得该树的先序遍历序列等于给定的先序遍历序列思路:很基础的题目了,就是先序遍历一下,如果在这个节点的左子节点的值不等于行程中下一个值,但是右子节点的值等于,那么就翻转一下,如果两个子节点的值都不等于,那么就没有解了。class Solution {public: vector<int>...原创 2019-01-06 12:22:45 · 507 阅读 · 0 评论 -
leetcode1014. 最佳观光组合(机智题)
题意:给定正整数数组A,A[i]表示第i个观光景点的评分,并且两个景点i和j之间的距离为j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i- j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。解法:因为要求A[I]+A[J]+i-j的最大值,就是求A[J]-J+A[I]+I的最大值,那么从...原创 2019-04-04 19:37:48 · 1138 阅读 · 0 评论 -
LeetCode 923. 三数之和的多种可能(机智题 三种解法)
题意:给定一个整数数组 A,以及一个整数 target 作为目标值,返回满足 i < j < k 且 A[i] + A[j] + A[k] == target 的元组 i, j, k 的数量。思路1:三数之和为一定值,一般的方法是统计前两数之和,然后遍历第三个数,并且二分前面存和的数组。这里对于相同的元素不好处理,所以简单的第一想法是,平方遍历前两个数,二分第三个数。分...原创 2018-10-18 20:21:51 · 1017 阅读 · 0 评论 -
leetcode 921. 使括号有效的最少添加(机智题)
题意:给一串括号组成的序列,问最少需要添加多少个才使得括号合法。从形式上讲,只有满足下面几点之一,括号字符串才是合法的:它是一个空字符串,或者 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者 它可以被写作 (A),其中 A 是有效字符串思路:一开始蒙着眼睛写DP,结果超时了。。。。。原来是个机智题。如果前面有"(",那么后面来“)”就能保证...原创 2018-10-18 19:46:44 · 2430 阅读 · 0 评论 -
leetcode 924. 尽量减少恶意软件的传播
题意:在一些分散的图中,某些图中有某些节点是病原体,与这些节点在一个图中的所有节点都被感染了,现在求去掉一个原始病原体,使得最终所有图中感染的节点最少思路:bfs,然后找只有一个病原体的联通快的最大数量,因为只有单个病原体的联通块去掉这个病原体之后会减少被感染的节点数量。如果有多个病原体在一个联通块,那么即使去掉一个病原体,这个联通块最终也会被感染。此外,如果有多个病原体节点都满足条件...原创 2018-10-18 19:24:16 · 1305 阅读 · 0 评论 -
Container With Most Water(双指针)单调栈 leetcode11.
题目大意:给一个数组,其中数组在下标i处的值为A[i],坐标(i,A[i])和坐标(i,0)构成一条垂直于坐标轴x的直线。现任取两条垂线和x轴组成四边形容器。问其中盛水量最大为多少?解法;从最原始的情况开始思考,即底的长度为最大值,两条竖直边分别是最左边和最右边,然后用left指向最左边,right指向最右边。然后考虑移动,在这种情况下,假如left>right,如果移动left的话,是没有意原创 2018-03-08 00:08:31 · 462 阅读 · 0 评论 -
LeetCode 4. 两个排序数组的中位数 (归并思想)
题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。示例 1:nums1 = [1, 3]nums2 = [2]中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]中位数是 (2 + 3)/2 = 2.5解析:很基本的归并排序合并数组的思想,因为两个...原创 2018-04-20 20:33:59 · 1916 阅读 · 2 评论 -
LeetCode 7. 反转整数(简单模拟)
给定一个 32 位有符号整数,将整数中的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。分析:注意事项就是为什么反转之后的整数会溢出?2^31是2147483...原创 2018-04-21 12:32:28 · 2163 阅读 · 0 评论 -
leetcode51. N皇后
题目如下:n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例:输入: 4输出: [ [".Q..", // 解法 1...原创 2018-07-24 19:51:00 · 199 阅读 · 0 评论 -
leetcode 72. 编辑距离(动态规划)
题目:给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rorse ->...原创 2018-07-27 13:15:10 · 2423 阅读 · 2 评论 -
leetcode.76. 最小覆盖子串(双指针法)
题目:给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。坑点:1.在S中找到包含T中所有字母的子串,这个子串并不仅仅是要包含所有T...原创 2018-08-04 13:04:17 · 1318 阅读 · 0 评论 -
leetcode.84. 柱状图中最大的矩形
题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例:输入: [2,1,5,6,2,3]输出: 10思路:...原创 2018-08-04 14:33:48 · 528 阅读 · 0 评论 -
leetcode 57. 插入区间
给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入: intervals = [[1,3],[6,9]], newInterval = [2,5]输出: [[1,5],[6,9]]示例 2:输入: intervals = [[1,2],[3,5],[6,7]...原创 2018-07-27 21:37:14 · 635 阅读 · 0 评论 -
leetcode 894. 所有可能的完整二叉树
题目:完整二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能完整二叉树的列表。 答案的每个元素都是一个可能树的根结点。答案中每个树的每个结点都必须有 node.val=0。你可以按任何顺序返回树的最终列表。 示例:输入:7输出:[[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,...原创 2018-08-27 11:33:56 · 1426 阅读 · 0 评论 -
leetcode895. 最大频率堆栈(两种思路)
题目:实现 FreqStack,模拟类似栈的数据结构的操作的一个类。FreqStack 有两个函数:push(int x),将整数 x 推入栈中。 pop(),它移除并返回栈中出现最频繁的元素。 如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。 示例:输入:["FreqStack","push","push","push","push","push"原创 2018-08-29 15:23:26 · 1790 阅读 · 2 评论 -
leetcode 908. 最小差值 I(简单题)
题目:给定一个整数数组 A,对于每个整数 A[i],我们可以选择任意 x 满足 -K <= x <= K,并将 x 加到 A[i] 中。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。思路:简单题,最主要的是看数组最大元素和最小元素之差是不是小于2*K。如果小于,那么这些数字肯定可以变成相同的。不同那么最大差值就是max...原创 2018-09-26 12:26:34 · 1433 阅读 · 0 评论 -
leetcode 909. 爬坡和梯子(BFS)
题目:现在有一个数组如下:36 35 34 33 32 3125 26 27 28 29 3024 23 22 21 20 1913 14 15 16 17 1812 11 10 09 08 0701 02 03 04 05 06每一次可以移动1至6格,然后某些位置还可能有梯子,梯子直达某些位置,现在在左下角,求最少移动次数,到右上角。思路:这题最恶心的地方就是,题...原创 2018-09-26 12:40:45 · 994 阅读 · 0 评论 -
leetcode 910. 最小差值 II
题目:给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。思路:首先排序,可以想到,大一些的估计都要-k,小一些的都要+k,但是这个分割点不好确定,所以循环遍历查找这个分割点就行。然后需要注意的是,分割点找到之后...原创 2018-09-26 12:49:50 · 1440 阅读 · 0 评论 -
leetcode 911. 在线选举(二分)
题目:有N个人,每个人会在ti时间投per[i]一张票,给一个时间数组tim[i],问在tim[i]的时候票最多的是谁,如果有相同的票数,最近获得票的那个最多者是谁。思路:用vector存储投票时间ti,和投票时的票最多的人。然后在时间数列中,对于每一个tim[i],都在vector中二分查找第一个大于tim[i]时间的那个位置即可。然后这个位置之前的那个位置就是我们需要得到的位置...原创 2018-09-26 12:57:13 · 878 阅读 · 0 评论 -
Leetcode 922. 按奇偶排序数组 II
题意:有一个数组A,数组中有一半奇数和一般偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。思路:emmmmm,用两个数组,一个存奇数,一个存偶数,然后依次放入新的数组中即可。代码:class Solution {public:vector<int> sortArrayByParityII(vector&l...原创 2018-10-18 18:48:19 · 434 阅读 · 0 评论 -
leetcode1015. 可被 K 整除的最小整数
题意:给定正整数K,你需要找出可以被 K 整除的、仅包含数字1的最小正整数 N。返回N的长度。如果不存在这样的N,就返回-1。题解:一开始我还想dfs爆搜,但是预处理起来很麻烦。没想到,真是没想到,还有这种操作!!!∑(゚Д゚ノ)ノ,直接遍历1e6个1的组合就行了。其中如果K中含有2和5的因数的话就明显无解,这里可以加一个优化,效果你们看得到。还能不...原创 2019-04-04 20:20:26 · 684 阅读 · 0 评论