欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法-向量路径最小差值的和(阿里巴巴3.25笔试第一题)

程序员文章站 2022-07-10 21:21:55
...

算法-向量路径最小差值的和

1、向量的最小插值和

题目来源是阿里3.25下午的笔试题

本来想再过几天做阿里笔试题,先刷刷题练练手,结果突然在微信群里看到,内推后一周内需要参加笔试,否则就会进简历池,无奈,只能硬顶上了…

一共有两道题目,第二题没来得及做,第一题暴力发现通过率感人,由于没记住第二题,现在只对第一题复盘

题目大概是这样的,感谢牛客网友----不懂代码的小白—的图 阿里巴巴0325笔试

算法-向量路径最小差值的和(阿里巴巴3.25笔试第一题)

刚开始没有想到动态规划。。。

我们可以声明一个和给定矩阵一样大小的矩阵作为转移方程

    @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列的矩阵,求其最小差值,并可以求到任意位置的最小差值的和。