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

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

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

发布了28 篇原创文章 · 获赞 9 · 访问量 2413

猜你喜欢

转载自blog.csdn.net/qq_23594799/article/details/105103148