上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 22 下一页
摘要: 实质就是求每个节点的最大深度。用一个hash表记录,最后输出。 其实可以不用hash表,每次深度比vector.size()大的时候新建一个vector,这样节省了空间。 类似的方法在别的题里也有应用。 时间复杂度 O(n) 空间复杂度 O(n) 阅读全文
posted @ 2018-09-04 11:56 約束の空 阅读(115) 评论(0) 推荐(0)
摘要: BFS的题目,一开始做的时候,我是判断出栈元素和数组里的元素是否距离为1,超时。思考了一下觉得是判断是否距离为1处,所有换过一个字母的字符串都要和每个wordList里元素比较,太耗时了。 所以直接建立一个set,所有换过一个字母的字符串直接在set里找,找到了就直接erase,方便不少。 Word 阅读全文
posted @ 2018-09-04 01:38 約束の空 阅读(210) 评论(0) 推荐(0)
摘要: 找中序遍历的后一个节点,那就中序遍历到当前节点后再往后一个,可以用递归,也可以非递归,完全没有用到BST的性质。 也可以充分利用BST的性质,如果p比当前节点小,说明在左子树,res=root;否则去右子树搜索。 用递归写 引申一下,如果求前面一个节点,也是一样做,只不过left right反一反。 阅读全文
posted @ 2018-09-01 01:52 約束の空 阅读(326) 评论(0) 推荐(0)
摘要: 300. Longest Increasing Subsequence brute force做的话,递归来做,每个元素在不在subsequence中,时间复杂度O(2^n) 方法一:DP 由于只需要求个数,不需要把subsequence求出来,很自然想到dp dp[i] 表示以 a[i] 为结尾的 阅读全文
posted @ 2018-08-31 05:14 約束の空 阅读(164) 评论(0) 推荐(0)
摘要: 排序题的变种,对于a和b,如果a+b>b+a,那么a排在b前面。 复习一下 sort 函数,如果cmp写在里面的写法:[](int a, int b){return a>b;} 阅读全文
posted @ 2018-08-31 04:50 約束の空 阅读(83) 评论(0) 推荐(0)
摘要: 方法一:Divide and Conquer 数组第一个一定是根,第一个大于根的一定是右子树的根,因此我们可以把 根,左右子树都区分开来。判断根是否在合理范围内,如果在,在分别判断左右子树。思路清晰,也很容易写。 Time: O(nlogn) 方法二:Stack 维护一个单调递减的栈。如果当前元素比 阅读全文
posted @ 2018-08-31 03:25 約束の空 阅读(122) 评论(0) 推荐(0)
摘要: 方法一:Brute Force 对于每个节点,计算以该节点为root时所有可能的个数。 Space: O(h), O(logn)~O(n) Time: calpath O(n), 对于dfs, T(n) = 2T(n/2)+O(n) 所以总的时间复杂度O(nlogn),当然这是在balanced t 阅读全文
posted @ 2018-08-31 02:06 約束の空 阅读(164) 评论(0) 推荐(0)
摘要: 格雷码,大学电路与电子学没好好上,哎。 最容易理解的方法是 镜面生成, 把原数组反过来最高位补1即可。 阅读全文
posted @ 2018-08-30 11:59 約束の空 阅读(94) 评论(0) 推荐(0)
摘要: 116. Populating Next Right Pointers in Each Node 直接做的话用levelOrder做即可,但是要求空间复杂度O(1),所以不行。 Recursive 这里递归是preOrder,一定要先将root的左右儿子连接起来,后面递归才能继续连接。 这里每次df 阅读全文
posted @ 2018-08-30 07:35 約束の空 阅读(98) 评论(0) 推荐(0)
摘要: Boomerang 回旋镖的意思,本题意思是寻找 abc的点对,使得ab,ac距离相等。 一个循环固定a,计算其余的点到a的距离,简历一个hashtable,保存对应距离的点的个数。 如果有n个点到a距离相等,那么一共有 P_n^2 种可能 (题目中提到不同顺序算多种) 149. Max Point 阅读全文
posted @ 2018-08-30 02:12 約束の空 阅读(125) 评论(0) 推荐(0)
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 22 下一页