摘要:
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; } 阅读全文