给你一个数组 towers 和一个整数 radius 。
数组 towers 中包含一些网络信号塔,其中 towers[i] = [xi, yi, qi] 表示第 i 个网络信号塔的坐标是 (xi, yi) 且信号强度参数为 qi 。所有坐标都是在 X-Y 坐标系内的 整数 坐标。两个坐标之间的距离用 欧几里得距离 计算。
整数 radius 表示一个塔 能到达 的 最远距离 。如果一个坐标跟塔的距离在 radius 以内,那么该塔的信号可以到达该坐标。在这个范围以外信号会很微弱,所以 radius 以外的距离该塔是 不能到达的 。
如果第 i 个塔能到达 (x, y) ,那么该塔在此处的信号为 ⌊qi / (1 + d)⌋ ,其中 d 是塔跟此坐标的距离。一个坐标的 信号强度 是所有 能到达 该坐标的塔的信号强度之和。
请你返回数组 [cx, cy] ,表示 信号强度 最大的 整数 坐标点 (cx, cy) 。如果有多个坐标网络信号一样大,请你返回字典序最小的 非负 坐标。
注意:
坐标 (x1, y1) 字典序比另一个坐标 (x2, y2) 小,需满足以下条件之一:
要么 x1 < x2 ,
要么 x1 == x2 且 y1 < y2 。
⌊val⌋ 表示小于等于 val 的最大整数(向下取整函数)。
输入:towers = [[1,2,5],[2,1,7],[3,1,9]], radius = 2
输出:[2,1]
解释:
坐标 (2, 1) 信号强度之和为 13
1 <= towers.length <= 50
towers[i].length == 3
0 <= xi, yi, qi <= 50
1 <= radius <= 50
暴力,用51*51的每个点都计算一遍辐射值
注意条件限制
class Solution {
public:
vector<int> bestCoordinate(vector<vector<int>>& towers, int radius) {
vector<int> radi(towers.size(),0); //每个点接受的辐射
int x1=0,y1=0,max = 0,now;
double d;
for(int i = 0;i<=50;i++) //x坐标
for(int j = 0;j<=50;j++) //y坐标
{
now=0;
for(int z=0;z<towers.size();z++)
{
d = sqrt(pow((towers[z][0]-i),2)+pow((towers[z][1]-j),2));
if(d<=radius)
now+=(int)(towers[z][2]/(d+1));
}
if(now>max)
{
max = now;
x1 = i;
y1 = j;
// cout<<"now: "<
}
}
vector<int> result(2);
result[0]=x1;
result[1]=y1;
return result;
}
};
//如果只计算塔所在的点则用下面的代码
// double d;
// int max = 0,maxx = 0,maxy = 0;
// for(int i =0;i
// {
// radi[i]+=towers[i][2];
// for(int j=0;j
// {
// d = sqrt(pow((towers[i][0]-towers[j][0]),2)+pow((towers[i][1]-towers[j][1]),2));
// // cout<
// if(d<=radius)
// {
// radi[j]+=(towers[i][2]/(d+1));
// radi[i]+=(towers[j][2]/(d+1));
// }
// }
// }
// for(int i =0;i
// if(radi[i]>max||radi[i]==max&&towers[i][0]
// { max = radi[i];
// maxx=towers[i][0];
// maxy=towers[i][1];
// }
// // cout<
// vector result(2);
// result[0]=maxx;
// result[1]=maxy;
// return result;
// }
// };
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/coordinate-with-maximum-network-quality
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。