LeetCode·每日一题·1620.网络信号最好的坐标·模拟

作者:小迅
链接:https://leetcode.cn/problems/coordinate-with-maximum-network-quality/solutions/1942998/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-vlhn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 

题目

 

示例

 

思路

题目很长而且不好懂,看懂题目就很容易了

名词解释:

欧几里得距离 不要被“欧几里得”距离整懵,指的就是高中解析几何里两点之间的距离。

数组 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值