最后
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
Java核心知识
- Spring全家桶(实战系列)
- 其他电子书资料
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
在剖分的最后, 1 1 1和 n n n一定会和第三个点构成一个三角形(如果不是,就不满足题目要求了),
在 [ 2 , n − 1 ] [2,n-1] [2,n−1]中枚举第三个点 k k k,构成一个三角形,剩下的 [ 1 , k ] [1,k] [1,k]、 [ k , n ] [k,n] [k,n]再次去划分,这就是相同结构的子问题了(当然也可能只有两个点,是基本情况)。
有没有重复?没有,选择了k和1、n构成三角形,其他划分里就不会出现 { 1 , n , k } \{1,n,k\} {1,n,k}这个三角形了,同理,其他情况类似。
于是方案数
f [ n ] = ∑ k = 2 n − 1 f [ k ] ∗ f [ n − k + 1 ] f[n] = \sum_{k=2}^{n-1} f[k]*f[n-k+1] f[n]=∑k=2n−1f[k]∗f[n−k+1]
令 f [ 2 ] = 1 f[2] = 1 f[2]=1
则$f[3]=1,f[4]=2,f[5]=5……正是卡特兰数!
当然这道题并不是让我们计算划分的方案数,但是,状态转移的思路是一致的。
d p [ i ] [ j ] = m i n ( a [ i ] ∗ a [ k ] ∗ a [ j ] + d p [ i ] [ k ] + d p [ k ] [ j ] ) dp[i][j] = min(a[i]*a[k]*a[j]+dp[i][k]+dp[k][j]) dp[i][j]=min(a[i]∗a[k]∗a[j]+dp[i][k]+dp[k][j])
class Solution {
public:
int n,dp[55][55] = {0};
int minScoreTriangulation(vector& A) {
n = A.size();
return dfs(0,n-1,A);
}
最后
由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!
小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》