阿里笔试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));
	}
}


#阿里笔试325##阿里巴巴#
全部评论

相关推荐

点赞 10 评论
分享
牛客网
牛客企业服务