[LeetCode] Best Meeting Point

Problem Description:

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?

This problem can be solved in each dimension and combine them together. And it can be proved that the median is the smallest point. Actually, the points between two medians in even length of numbers are the same value. So, for the simple case, we can just use the less one when it's even length.
int minTotalDistance(vector<vector<int>>& grid) {
	vector<int> x, y;
	int rowlen=grid.size();
	if(!rowlen) return 0;
	int collen = grid[0].size();
	if(!collen) return 0;
	
	for(int i=0;i<rowlen;i++)
	{
		for(int j=0;j<collen;j++)
		{
			if(grid[i][j]) 
<span style="white-space:pre">			</span>{
<span style="white-space:pre">				</span>x.push_back(i);
<span style="white-space:pre">				</span>y.push_back(j);
<span style="white-space:pre">			</span>}
		}
	}
	int xm=x[x.size()/2];
	int ym=y[y.size()/2];
	int s=0;
	for(int i=0;i<x.size();i++)
	{
		s+=abs(x[i]-xm);
	}
	for(int i=0;i<x.size();i++)
	{
		s+=abs(y[i]-ym);
	}
	return s;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值