Best Meeting Point

A group of two or more people wants to meet and minimize the total travel distance. You are given a 2D grid of values 0 or 1, where each 1 marks the home of someone in the group. The distance is calculated using Manhattan Distance, where distance(p1, p2) = |p2.x - p1.x| + |p2.y - p1.y|.

For example, given three people living at (0,0)(0,4), and (2,2):

1 - 0 - 0 - 0 - 1
|   |   |   |   |
0 - 0 - 0 - 0 - 0
|   |   |   |   |
0 - 0 - 1 - 0 - 0

The point (0,2) is an ideal meeting point, as the total travel distance of 2+2+2=6 is minimal. So return 6.

Hint:

  1. Try to solve it in one dimension first. How can this solution apply to the two dimension case?

 

Hide Company Tags

 

 
 1 public class Solution {
 2     public int minTotalDistance(int[][] grid) {
 3         List<Integer> row = new ArrayList<Integer>();
 4         List<Integer> col = new ArrayList<Integer>();
 5         
 6         for (int i = 0; i < grid.length; i++) {
 7             for (int j = 0; j < grid[i].length; j++) {
 8                 if (grid[i][j] == 1) {
 9                     row.add(i);
10                     col.add(j);
11                 }
12             }
13         }
14         
15         return getDistance(row) + getDistance(col);
16     }
17     
18     private int getDistance(List<Integer> list) {
19         Collections.sort(list);
20         int result = 0;
21         for (int i = 0, j = list.size() - 1; i < j; i++, j--)
22             result += list.get(j) - list.get(i);
23         return result;
24     }
25 }

 

posted @ 2017-02-17 22:55  amazingzoe  阅读(200)  评论(0编辑  收藏  举报