随笔分类 - leetcode
摘要:Q: A: //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);
        阅读全文
                
摘要:Q: A: 用两个堆(一大顶堆、一小顶堆模拟中位数),没见过类似的题目记录一下。 class MedianFinder { public: priority_queue<int,vector<int>,less<int>> heap1; //大顶堆 priority_queue<int,vector
        阅读全文
                
摘要:Q: A: 没思路,看别人思路做的,记录一下。把问题转化为图的遍历,不过好久没做过图的题了,dijikstra、floyd都忘了。好像学数据结构之后就再没看过,得补一下。。。 DFS: class Solution { public: set<string> points; //点集 map<pai
        阅读全文
                
摘要:Q: 递归: class Solution { public: string decodeString(string s) { if (s.empty()){ return ""; } string res="",str; int i=0,siz=s.size(); int repeat=0,tem
        阅读全文
                
摘要:Q: class Solution { public: int leastInterval(vector<char>& tasks, int n) { map<char,int>dc; for(char c:tasks){ dc[c]+=1; } vector<int>dic; for(auto p
        阅读全文
                
摘要:Q: A: 1.DP 主要题目中说了不超过100个数字,数字都不超过200。所以可能的和不会超过20000,这个量级对计算机来说不算大,所以考虑用DP考察每个可能的和是否存在。 class Solution { public: bool canPartition(vector<int>& nums)
        阅读全文
                
摘要:Q: A: 1.暴力找所有可能的子数组,n^2个子数组,最长长度n,则n ^3。 2.n^2解法 从1~n-1各起点开始,一直找到结尾,n^2 class Solution { public: int subarraySum(vector<int>& nums, int k) { int res=0
        阅读全文
                
摘要:Q: A: 1.递归,左右边界做函数参数,太弟弟略过。 2.迭代,鼓捣了半天 题目给的字符串只看数字顺序的话是前序。那么想一下我们写非递归前序遍历时候,对于一个节点cur,如果不是空直接输出它的值,然后放到栈顶,再令cur=cur的左孩子进行循环。如果cur为空,那么令cur=栈顶的右孩子并pop栈
        阅读全文
                
摘要:Q: A: 首先这题可以遍历一遍二叉树,用一个map来存每个数字出现的次数之后取最大的就行,但这样没有利用到二叉搜索树的条件。所以我们利用二叉搜索树中序遍历升序(此题中为非降序)的性质,保存中序前缀节点,若当前节点与前缀节点值相同,计数+1,若不同则重新从0开始计数。因为是非降序,所以一旦遍历到了一
        阅读全文
                
摘要:297. 二叉树的序列化与反序列化 Q: A: 可以层次遍历、前序、中序。 层次遍历,空节点存个特殊符号标记一下就好,重建树也是按层次BFS重建树。 1 class Codec { 2 public: 3 4 // Encodes a tree to a single string. 5 strin
        阅读全文
                
摘要:Q: A: 思路1: 节点node若是同值子树点,则其左右子树首先都是同值子树点,并且左右孩子的val与node的val相同。介于此,遍历node的时候,对左右子树dfs返回一个bool值,若都为真,再将三者的val进行对比,否则直接返回false。 /** * Definition for a b
        阅读全文
                
摘要:Q: A: 这题没做出来,记录下 利用题意中的k为排在前面且身高大于等于这个人的数量。则先把身高高的都排好,然后把当前这个人往里排的时候,就直接看这个人的k值是多少,插到对应位置就行了。异常巧妙的是,这个方法正好利用了题目k的定义,反正我是想不出来。 class Solution { public:
        阅读全文
                
摘要:Q: A: 首先这题可以和粉刷房子这题一样解法,对于i号房子,遍历k种颜色,对于每一种,都去找i-1号房子除该颜色之外的最小花费。但上一题是3种颜色,总复杂度O(N),这题k种颜色,复杂度O(NK^2),题目要求O(NK),则对于i号房子我们保存下当前房子最小的花费以备i+1号房子使用,但因为相邻房
        阅读全文
                
摘要:Q: A: 这种题的用例是一定会搞一些很大的数的。long都会溢出,所以我们就不用尝试转数字做加法转链表的方法了。另外直接倒置两个链表再做加法的做法会改变原链表,题干也说了禁止改动原链表。 1.求两个链表长度,如果一长一短,把短的前面加若干个0节点,使得两个链表长度相同。之后对于就递归连接链表。df
        阅读全文
                
摘要:简单题没做出来。 先排序,然后固定最大的一条边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为
        阅读全文
                
摘要:1.暴力排序,新建节点类重载小于符号排序。 class Solution { public: struct comb{ int index,distance; comb():index(0),distance(0){} comb(int a,int b){ index=a;distance=b; }
        阅读全文
                
摘要:Q: A: 想到了先对整个数组重新排序,长度小的在前,长度一样的按字符串字典序从小到大排序。之后考察每个字符串就好了,找到一个,当前长度的就都跳过,直接考察长度+1的字符串。 然而蛋疼的是我考察每个字符串是否可以转化为目标字符串时用的是dfs。这题要求的是一个字符串a能转化为字符串b即可,而不是求a
        阅读全文
                
摘要:Q: A: 1.暴力计算,MN个节点,每个节点遍历MN次,O(M^2* N^2) 代码不贴了 2.我写的DP,时间O(MN),空间O(MN) 代码(有点长,但没什么技巧,就是强行保存算过的值) class Solution { public: int minTotalDistance(vector<
        阅读全文
                
摘要:Q: 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。 示例 1: 输入: “abc” 输出: 3 解释: 三个回文子串: “a”, “b”, “c”. 示例 2: 输入: “aaa” 输出: 6 说明:
        阅读全文
                
摘要:这个我觉得还比较好理解,比较标准的背包DP 然后放个链接一个妹子的01背包讲解,觉得很不错,防止自己啥时候忘了再看看 class Solution { public: int findTargetSumWays(vector<int>& nums, int S) { int sum=accumula
        阅读全文
                

浙公网安备 33010602011771号