作者:小迅
链接:https://leetcode.cn/problems/coordinate-with-maximum-network-quality/solutions/1942998/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-vlhn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目![](https://i-blog.csdnimg.cn/blog_migrate/83e53080d3a1897adaf4424528cfabf7.png)
示例![](https://i-blog.csdnimg.cn/blog_migrate/a47f35d3fe9a06414942288d2fc0cef0.png)
思路
题目很长而且不好懂,看懂题目就很容易了
名词解释:
欧几里得距离 不要被“欧几里得”距离整懵,指的就是高中解析几何里两点之间的距离。
数组 towers 中包含一些网络信号塔,其中 towers[i] = [xi, yi, qi] 表示第 i 个网络信号塔的坐标是 (xi, yi) 且信号强度参数为 q,注意towers只是信号塔并不是之后要返回的坐标,我们需要找所有坐标中,信号强度最高的,但是信号强度最高并不一定在信号塔的位置,所有需要遍历所有位置,而且题目规定坐标小于 50 ,那么我们可以枚举所有坐标并计算当前位置的信号强度,最后选择最大值即可,注意在枚举时,我们可以从小到大枚举,这样就不需要考虑字典序因为我们枚举的顺序就是按字典序来的
代码
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
#define MAX(a, b) ((a) > (b) ? (a) : (b))
//距离计算
static int mysqrt(int *tower1, int *tower2)
{
return (tower1[0] - tower2[0]) * (tower1[0] - tower2[0]) + (tower1[1] - tower2[1]) * (tower1[1] - tower2[1]);
}
int* bestCoordinate(int** towers, int towersSize, int* towersColSize, int radius, int* returnSize){
int *ans = (int *)malloc(sizeof(int) * 2);
memset(ans, 0, sizeof(ans));
*returnSize = 2;
int max = 0;//初始化
for(int i = 0; i <= 50; ++i) {
for(int j = 0; j <= 50; ++j) {//枚举所有点
int sum = 0;
int d = 0;
int temp[2] = {i,j};
for(int j = 0; j < towersSize; ++j) {//枚举所有信号塔
if((d = mysqrt(temp, towers[j])) <= radius * radius) {
sum += (int)(towers[j][2] / (1 + pow(d,0.5)));//累加所有信号值
}
}
if(max < sum)
{//保存最大小标
memcpy(ans, temp, sizeof(temp));
max = sum;
}
}
}
return ans;
}
作者:小迅
链接:https://leetcode.cn/problems/coordinate-with-maximum-network-quality/solutions/1942998/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-vlhn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。