Leetcode
killer__
这个作者很懒,什么都没留下…
展开
-
394. 字符串解码
dfs:class Solution {public: string decodeString(string s) { int i=0; return dfs(s,i); } string dfs(string& s,int& i){//计算一对括号内的解码后字符串 string tmp=""; ...原创 2020-02-02 22:27:50 · 135 阅读 · 0 评论 -
leetcode78.子集➕90.子集2
78子集dfsdfs1:和全排列的区别就是对于当前考察的索引i,全排列如果不取i,之后还要取i,所以需要一个visited数组用来记录。对于子集问题如果不取i,之后也不必再取i。class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { ...原创 2020-02-02 16:12:30 · 379 阅读 · 0 评论 -
leetcode5. 最长回文子串
Solution1 动态规划方法1:dp[i][j]表示i到j是否是回文class Solution {public: string longestPalindrome(string s) { int n=s.size(); int max_len=1,le=0,ri=0; if(n==0){return "";} ve...原创 2020-02-02 14:16:48 · 122 阅读 · 0 评论 -
Leetcode找三个数字的和满足xx条件的题目总结15➕16➕259
双指针最基础的题目是一个区间里找两个数字的和等于Target。首先将区间从小到大排序。接下来只要一个le指针,一个ri指针,分别从区间左右边界往中间推进即可。复杂度是排序的nlogn。下面几道题都是一个区间里找三个数字的和满足xx条件的。这个题目的做法就是先固定一个数字,然后在该数字的右侧区间内重新使用之前找两个数字的和的算法。 即i 从0到n-1,j 从i+1开始增加,k 从n-1开始减小直...原创 2020-01-31 01:43:38 · 318 阅读 · 0 评论 -
Leetocde的两道丑数题目:264. 丑数 II➕313. 超级丑数
Q:A:用变量记录已经✖2、✖3、✖5的元素下标i2、i3、i5。表示截止到i2的元素都已经乘过2(结果添加到序列尾部的意思),i3、i5同理。这样每次可以循环可以O(1)时间找到下一个最小的丑数,时间O(N),空间O(N)。class Solution {public: int nthUglyNumber(int n) { if(n<=0){ ...原创 2019-12-19 12:43:59 · 162 阅读 · 0 评论 -
395. 至少有K个重复字符的最长子串
Q:A:分治,对于字符串s的任何一个字符,如果它的频数(在s中出现的次数)小于k,则它一定不会出现在最后的结果里,也就是从它的位置一劈两半,考察左右。对于当前字符串s,我们先建立字典统计其中每种字符出现的次数,对于某字符,假设为x,x在当前字符串中出现的次数小于为kk,kk<k。则所有的字符x可将当前字符串s切片为kk+1个子串,递归对这kk+1个子串进行考察即可。class Sol...原创 2019-12-15 21:51:23 · 153 阅读 · 0 评论 -
378. 有序矩阵中第K小的元素
//O(NK)class Solution {public: int kthSmallest(vector<vector<int>>& matrix, int k) { int m=matrix.size(); int cnt=0; vector<int> indexes(m,0); int...原创 2019-12-12 15:40:09 · 126 阅读 · 0 评论 -
295. 数据流的中位数
Q:A:用两个堆(一大顶堆、一小顶堆模拟中位数),没见过类似的题目记录一下。class MedianFinder {public: priority_queue<int,vector<int>,less<int>> heap1; //大顶堆 priority_queue<int,vector<int>,great...原创 2019-12-07 00:35:00 · 122 阅读 · 0 评论 -
399. 除法求值
Q:没思路,看别人思路做的,记录一下。把问题转化为图的遍历。DFS:class Solution {public: set<string> points; //点集 map<pair<string,string>,double> edges; //边集 vector<double> res; ...原创 2019-12-01 20:41:36 · 182 阅读 · 0 评论 -
394. 字符串解码
Q:递归:class Solution {public: string decodeString(string s) { if (s.empty()){ return ""; } string res="",str; int i=0,siz=s.size(); int repea...原创 2019-11-28 18:09:07 · 140 阅读 · 0 评论 -
621. 任务调度器
Q:class Solution {public: int leastInterval(vector<char>& tasks, int n) { map<char,int>dc; for(char c:tasks){ dc[c]+=1; } vector<i...原创 2019-11-28 15:35:24 · 132 阅读 · 0 评论 -
416. 分割等和子集
Q:A:1.DP主要题目中说了不超过100个数字,数字都不超过200。所以可能的和不会超过20000,这个量级对计算机来说不算大,所以考虑用DP考察每个可能的和是否存在。class Solution {public: bool canPartition(vector<int>& nums) { if(nums.empty()){ ...原创 2019-11-24 21:00:07 · 136 阅读 · 0 评论 -
leetcode全部滑动窗口题目总结C++写法(完结)
3. 无重复字符的最长子串A:要找最长的无重复子串,所以用一个map保存出现过的字符,并且维持一个窗口,用le和ri指针标识。ri为当前要遍历的字符,如果ri字符在map中出现过,那么将le字符从map移除,le++。如果ri字符没出现过,那ri++,并更新最大无重复子串长度。全程利用map保持无重复的要求,每次循环要么le++,要么ri++。最差情况是n个一样的字符,那么ri++,le++,...原创 2019-11-13 22:23:45 · 666 阅读 · 0 评论 -
560. 和为K的子数组
Q:A:1.暴力找所有可能的子数组,n^2个子数组,最长长度n,则n ^3。2.n^2解法从1~n-1各起点开始,一直找到结尾,n^2class Solution {public: int subarraySum(vector<int>& nums, int k) { int res=0; for(int i=0;i<...原创 2019-11-12 14:05:22 · 156 阅读 · 0 评论 -
536. 从字符串生成二叉树
Q:A:1.递归,左右边界做函数参数,太弟弟略过。2.迭代,鼓捣了半天题目给的字符串只看数字顺序的话是前序。那么想一下我们写非递归前序遍历时候,对于一个节点cur,如果不是空直接输出它的值,然后放到栈顶,再令cur=cur的左孩子进行循环。如果cur为空,那么令cur=栈顶的右孩子并pop栈顶并继续。对于给定前序字符串,假如前三个数字是a、b、c,首先应该新建一个值为a的节点A(毕竟我...原创 2019-11-11 20:05:02 · 777 阅读 · 0 评论 -
501. 二叉搜索树中的众数
Q:A:首先这题可以遍历一遍二叉树,用一个map来存每个数字出现的次数之后取最大的就行,但这样没有利用到二叉搜索树的条件。所以我们利用二叉搜索树中序遍历升序(此题中为非降序)的性质,保存中序前缀节点,若当前节点与前缀节点值相同,计数+1,若不同则重新从0开始计数。因为是非降序,所以一旦遍历到了一个更大的数字,之后的数字都只会相同或更大。额外维持一个全局变量maxsize记录目前为止的出现最多...原创 2019-11-10 14:47:27 · 131 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化+449. 序列化和反序列化二叉搜索树
297. 二叉树的序列化与反序列化Q:A:没啥说的,层次遍历,空节点存个特殊符号标记一下就好,重建树也是按层次BFS重建树。class Codec {public: // Encodes a tree to a single string. string serialize(TreeNode* root) { string res("");...原创 2019-11-09 20:17:49 · 313 阅读 · 0 评论 -
250. 统计同值子树
Q:A:思路1:节点node若是同值子树点,则其左右子树首先都是同值子树点,并且左右孩子的val与node的val相同。介于此,遍历node的时候,对左右子树dfs返回一个bool值,若都为真,再将三者的val进行对比,否则直接返回false。/** * Definition for a binary tree node. * struct TreeNode { * int...原创 2019-11-07 23:04:40 · 845 阅读 · 2 评论 -
406. 根据身高重建队列
Q:A:这题没做出来,记录下利用题意中的k为排在前面且身高大于等于这个人的数量。则先把身高高的都排好,然后把当前这个人往里排的时候,就直接看这个人的k值是多少,插到对应位置就行了。异常巧妙的是,这个方法正好利用了题目k的定义,反正我是想不出来。class Solution {public: static bool cmp(const vector<int>&...原创 2019-11-07 20:04:47 · 159 阅读 · 0 评论 -
265. 粉刷房子 II
Q:A:首先这题可以和粉刷房子这题一样解法,对于i号房子,遍历k种颜色,对于每一种,都去找i-1号房子除该颜色之外的最小花费。但上一题是3种颜色,总复杂度O(N),这题k种颜色,复杂度O(NK^2),题目要求O(NK),则对于i号房子我们保存下当前房子最小的花费以备i+1号房子使用,但因为相邻房子不能涂相同颜色的油漆。假设对于i号房子最小花费是涂x号油漆,则对于i+1号房子来说,一定不能涂x...原创 2019-11-06 16:37:01 · 393 阅读 · 0 评论 -
445. 两数相加 II
Q:A:这种题的用例是一定会搞一些很大的数的。long都会溢出,所以我们就不用尝试转数字做加法转链表的方法了。另外直接倒置两个链表再做加法的做法会改变原链表,题干也说了禁止改动原链表。1.求两个链表长度,如果一长一短,把短的前面加若干个0节点,使得两个链表长度相同。之后对于就递归连接链表。dfs函数参数为前一个结果链表指针pre,当前的两个数据链表指针p1、p2。在函数中首先新建节点与pr...原创 2019-11-05 22:37:27 · 106 阅读 · 0 评论 -
976. 三角形的最大周长
简单题没做出来。先排序,然后固定最大的一条边c,找较小的两条边a和b,这样的好处就是已经有c+a>b和c+b>a成立,只需要找满足a+b>c的最大a和b就行了。另外证明一下为什么a和b一定是c前面紧挨的两条边。假设x1,x2,x3,…,xk,xk+1,…,xn其中a=x2,b=xk,c=xn为目前最优解,即x2+xk>xn,但x3>x2,则x3+xk>xn...原创 2019-11-05 15:57:40 · 327 阅读 · 0 评论 -
973. 最接近原点的 K 个点
1.暴力排序,新建节点类重载小于符号排序。class Solution {public: struct comb{ int index,distance; comb():index(0),distance(0){} comb(int a,int b){ index=a;distance=b; } ...原创 2019-11-05 01:24:01 · 153 阅读 · 0 评论 -
524. 通过删除字母匹配到字典里最长单词
Q:A:想到了先对整个数组重新排序,长度小的在前,长度一样的按字符串字典序从小到大排序。之后考察每个字符串就好了,找到一个,当前长度的就都跳过,直接考察长度+1的字符串。然而蛋疼的是我考察每个字符串是否可以转化为目标字符串时用的是dfs。这题要求的是一个字符串a能转化为字符串b即可,而不是求a转化为b有多少种方法。后者肯定要递归回溯来算的,但这题只需要求是或不是。故只要找到a[i]和b[j...原创 2019-11-01 18:52:58 · 147 阅读 · 0 评论 -
296. 最佳的碰头地点
Q:A:1.暴力计算,MN个节点,每个节点遍历MN次,O(M^2* N^2)代码不贴了2.我写的DP,时间O(MN),空间O(MN)代码(有点长,但没什么技巧,就是强行保存算过的值)class Solution {public: int minTotalDistance(vector<vector<int>>& grid) { ...原创 2019-10-31 18:57:17 · 2847 阅读 · 0 评论 -
647. 回文子串
Q:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: “abc”输出: 3解释: 三个回文子串: “a”, “b”, “c”.示例 2:输入: “aaa”输出: 6说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.注意:输入的...原创 2019-10-31 12:04:40 · 82 阅读 · 0 评论 -
494. 目标和
这个我觉得还比较好理解,比较标准的背包DP然后放个链接一个妹子的01背包讲解,觉得很不错,防止自己啥时候忘了再看看class Solution {public: int findTargetSumWays(vector<int>& nums, int S) { int sum=accumulate(nums.begin(),nums.en...原创 2019-10-29 14:18:12 · 98 阅读 · 0 评论 -
371. 两整数之和
Q:不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1A:主要是记录一下加法可以用异或和与替代,异或等价于没有进位机制的加法,与等于进位,如0001和0001与运算得0001,说明最后一位要进位。然后循环把异或加法的结果作为下一...原创 2019-10-25 22:53:12 · 108 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
Q:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]A:虽然是简单题,但...原创 2019-10-22 21:34:51 · 145 阅读 · 0 评论 -
312. 戳气球
Q:有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球...原创 2019-10-21 17:34:01 · 129 阅读 · 0 评论 -
329. 矩阵中的最长递增路径
DPclass Solution {public: int longestIncreasingPath(vector<vector<int>>& matrix) { if(matrix.size()==0 or matrix[0].size()==0) { return 0; ...原创 2019-10-20 15:01:23 · 108 阅读 · 0 评论 -
199. 二叉树的右视图
Q:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释:1 <—/ 2 3 <—\ 5 4 <—A:解法1:常规层次遍历每次取最后一个元素:class ...原创 2019-10-18 20:33:28 · 86 阅读 · 0 评论 -
117. 填充每个节点的下一个右侧节点指针 II
Q:给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:输入:{“KaTeX parse error: Expecte...原创 2019-10-16 23:27:51 · 78 阅读 · 0 评论 -
304. 二维区域和检索 - 矩阵不可变
Q:题目描述评论 (42)题解(9)New提交记录给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。Range Sum Query 2D上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。示例:给定 matri...原创 2019-09-15 00:54:27 · 198 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
Q:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1...原创 2019-09-15 18:45:27 · 102 阅读 · 0 评论 -
316. 去除重复字母
Q:给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入: “bcabc”输出: “abc”示例 2:输入: “cbacdcbc”输出: “acdb”A:自己不会,看的别人思路,构造一个栈,遍历字符串,开一个数组做字典记录当前已有的字母。首先若当前字母已记录则continue。...原创 2019-10-04 23:53:12 · 525 阅读 · 0 评论 -
287. 寻找重复数
Q:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) ...原创 2019-10-07 16:51:32 · 90 阅读 · 0 评论 -
123. 买卖股票的最佳时机 III
class Solution: def maxProfit(self, prices) -> int: l=len(prices) if l<2: return 0 res=0 #先算一个dp1数组 #dp1[i]表示截止到第i-1天只进行一次买卖的最大利润 ...原创 2019-08-07 21:09:47 · 99 阅读 · 0 评论 -
166. 分数到小数
这题真的挺难的,主要难在数学,哈希表的使用倒是很浅显,我也是看了别人的思路再自己写的。a/b,a为被除数、b为除数思路就是把所有补0的被除数都放入哈希表,对应的键值是当前字符串的长度。若出现相同的补过0的被除数则代表接下来除法的结果会开始循环,则跳出循环并在对应位置加括号输出。几个要判断的地方:1.假如当前被除数小于除数,加了一位或补了一个0之后还是小于除数,则在结果中应该加0,如1/10...原创 2019-08-03 22:12:39 · 115 阅读 · 0 评论 -
300. 最长上升子序列
Q:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?A:1.常规d...原创 2019-09-14 13:56:58 · 91 阅读 · 0 评论