/* * 296. Best Meeting Point * 2016-7-2 by Mingyang * 这道题不难,但是有个概念就是必须清楚为什么曼哈顿距离最小是在中点的位置 * 很没有意思的一个题目,不详谈 */ public int minTotalDistance(int[][] grid) { List<Integer> ipos = new ArrayList<Integer>(); List<Integer> jpos = new ArrayList<Integer>(); // 统计出有哪些横纵坐标 for(int i = 0; i < grid.length; i++){ for(int j = 0; j < grid[0].length; j++){ if(grid[i][j] == 1){ ipos.add(i); jpos.add(j); } } } int sum = 0; Collections.sort(ipos); for(Integer pos : ipos){ sum += Math.abs(pos - ipos.get(ipos.size() / 2)); } // 计算横坐标到横坐标中点的距离,这里需要排序,因为统计不是按照j的顺序 Collections.sort(jpos); for(Integer pos : jpos){ sum += Math.abs(pos - jpos.get(jpos.size() / 2)); } return sum; }