zoukankan      html  css  js  c++  java
  • 296. 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.

    本题可以归结为数学问题,让我们求最佳的开会地点,A————P————B,从一维上面来考虑,假如P为最佳的点,那么P一定是在AB的中间,如果在左面或者右面,则距离就大于AB的距离了。四个点的情况如下:C———A——P——B——D,P也一定位于AB之间,而三个点的情况C——A——B,P一定位于刚好A点的距离,此时距离最小。扩展二维距离也是类似的,实现的时候需要注意,一定要把点分别按照row从小到大和col从小到大排序。

    代码如下:

     1 public class Solution {
     2     public int minTotalDistance(int[][] grid) {
     3         int m = grid.length;
     4         int n = grid[0].length;
     5         List<Integer> row = new ArrayList<>();
     6         List<Integer> col = new ArrayList<>();
     7         for(int i=0;i<m;i++){
     8             for(int j=0;j<n;j++){
     9                 if(grid[i][j]==1){
    10                     row.add(i);
    11                     col.add(j);
    12                 }
    13             }
    14         }
    15         return getMin(row)+getMin(col);
    16     }
    17     public int getMin(List<Integer> list){
    18         int i=0;
    19         int j=list.size()-1;
    20         Collections.sort(list);
    21         int res = 0;
    22         while(i<j){
    23             res+=list.get(j--)-list.get(i++);
    24         }
    25         return res;
    26     }
    27 }
    28 // the run time of the O(mnlogn).the space complexity could be O(m+n);
  • 相关阅读:
    【Linux】PS命令
    【Linux】多进程与多线程之间的区别
    【杂项】XML Schema和DTD的区别
    推荐一组强大的Collection类
    关于Decorator模式我的理解
    菜鸟白话设计模式系列
    PowerCollections研究: 第1弹竟就发现不少问题
    [白话设计模式] Singleton
    PowerCollection研究:第2枪小谈RemoveALL算法
    yield 关键字
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6901745.html
Copyright © 2011-2022 走看看