阿里笔试3-25 第一题
沿着矩阵列方向找出一条路径,使路径上元素间差绝对值和最小,打印该最小和
思路图:
以下测试用例
5
5 9 5 4 4
4 7 4 10 3
2 10 9 2 3
以下输出显示
[4, 5, 7]
[2, 3, 5]
[5, 6, 8]
[4, 8, 10]
[5, 9, 11]
[4, 4, 6]
[5, 5, 9]
[5, 9, 11]
[7, 7, 11]
[5, 9, 11]
[6, 8, 12]
[6, 8, 12]
5
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int[][] a=new int[3][n]; for(int i=0;i<3;i++) { for(int j=0;j<n;j++) { a[i][j]=scanner.nextInt(); } } int[][] dp=new int[3][n]; for(int j=1;j<n;j++) { //逐列操作 for(int i=0;i<3;i++) { int val=a[i][j]; //dp矩阵每一个位置都需要计算三个值,找最小值赋给该位置dp ArrayList<Integer> list=new ArrayList<Integer>(); //各路径对应相加 list.add(Math.abs(a[0][j-1]-val)+dp[0][j-1]); list.add(Math.abs(a[1][j-1]-val)+dp[1][j-1]); list.add(Math.abs(a[2][j-1]-val)+dp[2][j-1]); list.sort(null); System.out.println(list); dp[i][j]=list.get(0); } } ArrayList<Integer> lastlinedp=new ArrayList<Integer>(); for(int i=0;i<3;i++) { lastlinedp.add(dp[i][n-1]); } lastlinedp.sort(null); System.out.println(lastlinedp.get(0)); } }