算法-向量路径最小差值的和(阿里巴巴3.25笔试第一题)
程序员文章站
2022-07-10 21:21:55
...
算法-向量路径最小差值的和
1、向量的最小插值和
题目来源是阿里3.25下午的笔试题
本来想再过几天做阿里笔试题,先刷刷题练练手,结果突然在微信群里看到,内推后一周内需要参加笔试,否则就会进简历池,无奈,只能硬顶上了…
一共有两道题目,第二题没来得及做,第一题暴力发现通过率感人,由于没记住第二题,现在只对第一题复盘
题目大概是这样的,感谢牛客网友----不懂代码的小白—的图 阿里巴巴0325笔试
刚开始没有想到动态规划。。。
我们可以声明一个和给定矩阵一样大小的矩阵作为转移方程
@Test
public void myHelper(){
int[][] matrix={{5,9,5,4,4},{4,7,4,10,3},{2,10,9,2,3}};
solve(matrix);
}
/**
*求向量的最小插值
*/
public void solve(int [][]matrix){
int m=matrix.length;
int n=matrix[0].length;
int[][]dp=new int[m][n];//动态规划,表示到这里的最小差值
for (int i=1;i<n;i++){//第一列差值为0,默认就是,所以不用再赋值了
for (int j=0;j<m;j++){
dp[j][i]=Integer.MAX_VALUE;
for(int k=0;k<m;k++){
dp[j][i]=Math.min(dp[k][i-1]+Math.abs(matrix[j][i]-matrix[k][i-1]),dp[j][i]);
}
}
}
int min=Integer.MAX_VALUE;
for(int i=0;i<m;i++){
min=Math.min(min,dp[i][n-1]);
}
System.out.println(min);
}
这样做可以处理m行n列的矩阵,求其最小差值,并可以求到任意位置的最小差值的和。
上一篇: Qt工作笔记-对Qt工作线程的进一步理解
下一篇: vue使用swiper插件