Edit Distance
给两个字符串和三种操作, 添加/删除/替换其中一个字符. 问怎么最少的操作得到另一个字符串. 这个是经典算法. 用dp做, dp[i][j] 代表在w1的i和w2的j的最少操作.
给两个字符串和三种操作, 添加/删除/替换其中一个字符. 问怎么最少的操作得到另一个字符串. 这个是经典算法. 用dp做, dp[i][j] 代表在w1的i和w2的j的最少操作.
给一个数组, 由0,1,2组成, 让排序, 这个以为已经知道数组的元素个数. 是经典算法, 就是以1为pivot的quicksort的partition.
求n和k的组合数. 这个利用dfs就能找到左右组合的数字.
给一个已经排序好的数组, 允许最多两次重复, 剩下的重复都删除. 求新数组的长度.
给一个链表, 和两个值m和n, 返回链表, 让m和n之间node翻转. 我们主要是先找到这两个node. 我们知道n和m, 就知道n和m之间差几个node. 这样我们找到m后, 往前翻转即可.
给一个二叉树, 做in order遍历.
给一个数组, 里面的数组代表一个柱状图, 每个数代表高度. 求最大的矩阵. 这个题用一个stack来track当前最高的柱子, 这样我们知道长度(当前的i)和高度(stack里增序的柱子)的面积. 这个面积就是答案.
给一个2d数组, 里面是0和1. 返回最大的全是1的矩形. 这个题和柱状图的最大矩形是一个解法.用largest方法找到一个数组上最大的矩形.
给一个链表, 和一个值x. 以x为pivot做partition.
给三个字符串, S1,S2,S3. 问S3是不是S1和S2交叉在一起. 这个题用dp来做. dp[i][j] 表示s1的前i和s2的前j个字符能组成s3的前i+j个字符. 那么是true. 这个dp最难的是初始化.