333 Largest BST Subtree
1 | Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest means subtree with largest number of nodes in it. |
1 | Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest means subtree with largest number of nodes in it. |
秋招面的本来就不多,听到的最多的就是:你基础不好。对着屏幕从题库里跳出一大堆概念问题,对面背的不够熟练或者漏了一条,然后就是你基础不好。:-(
区别:
- 进程是资源分配的基本单位,线程是独立调度的基本单位。
- 在同一进程中,线程的切换不会引起进程切换。
- 由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。而线程开销小。
今天面试反转链表竟然能写错,真的想杀了自己,每次都在关键时刻掉链子,难的能写出来,简单的缺写错。做链表题的时候,遍历的时候注意循环的条件。到底是p==null
还是p.next==null
,然后考虑循环条件满足的时候,循环体中的变量有没有满足。碰到循环或者递归不要一步一步去模拟,这样没完没了。
1 | public ListNode reverse(ListNode head){ |
1 | string minWindow(string s, string t) { |
1 | Given a directed, acyclic graph of N nodes. Find all possible paths from node 0 to node N-1, and return them in any order. |
直接从0节点,DFS找到N-1就行了。因为是无环图也不需要判断有没有遍历过。
在找的时候会有重复的节点被找多次,可以采用Map<Integer,List<List
这种会重复路径的问题,类似DP,要记得试着去记录下来
1 | Given a binary array, find the maximum length of a contiguous subarray with equal number of 0 and 1. |
找到连续的子数组,包含相同个数的0和1.
看到解法才想到之前看到过的微软的一到面试题,找出数组中的最长的和为0的字数组(好像是这样,忘记了),
如果遍历数组的话,找到一段符合要求的还要判断能不能和前面满足要求的子数组连起来,求最大值。
求和,如果当前sum(i)等于之前某个位置的sum(j),说明这中间为0,sum(i)-sum(j)就行了。
回到这一题,按照原来的想法看,思路完全是一样的,当前子数组都有可能和之前的子数组连起来。把0变成-1就和之前的题一模一样了。
1 | for(int i;i<length;i++){ |
1 | Given an integer matrix, find the length of the longest increasing path. |
对每个格子找出以此为起点用dfs找出最长的,之后,找出所有的各自的最长的。对每个格子找出最长的时候记录下来,因为格子不一定是起点,有更小的话找到该格子,直接加上就行了,不用在找一遍。
前i个物体放入容量为v的背包可以获得的最大值
F[i,v]=max{F[i-1,v],F[i-1,v-Ci]+Wi}
O(Vn)
因为只跟前一个状态i-1有关,空间可以优化.
F[v]跟F[v-Ci]有关,也就是数组后面的跟前面的有关,如果顺序计算,那么前面是更新后的,在计算后面的就不是前一次的状态的了,所以要递减来计算。
1 | for(int i=0;i<n;i++){ |
初始化: