zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    NOI2010 能量采集
    NOI2011 兔兔与蛋蛋游戏
    动态规划——min/max的单调性优化总结
    NOI2011 NOI嘉年华
    NOI2011 阿狸的打字机
    NOI2011 智能车比赛
    NOI2011 兔农
    NOI2012 魔幻棋盘
    NOI2012 美食节
    NOI2012 迷失游乐园
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/6411815.html
Copyright © 2011-2022 走看看