LeetCode每日一题11.2网络信号最好的坐标

题目描述:

给你一个数组 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的最大整数(向下取整函数)。

解题思路:

直接拿暴力法求解就好,因为题目中给了坐标的范围为[0,50]所以我们只需要开两个遍历,分别去求得各个点与传入信号塔之间的距离,然后判断该距离是否在信号覆盖范围内,若在即通过公式算出信号强度进行一个叠加,然后将叠加后的值与当前信号最强值比较,若大于信号最强值,则更新坐标为当前坐标。最终返回遍历完后的最大值坐标即为最终解。

代码:

class Solution:
    def bestCoordinate(self, towers: list[list[int]], radius: int) -> list[int]:
        max = 0
        ans = [0, 0]
        for i in range(51):
            for j in range(51):
                t = 0
                for x, y, q in towers:
                    d = ((x - i) ** 2 + (y - j) ** 2) ** 0.5
                    if d <= radius:
                        t += (q // (1 + d))
                if t > max:
                    max = t
                    ans = [i, j]
        return ans


if __name__ == '__main__':
    result = Solution().bestCoordinate(towers=[[1, 2, 13], [2, 1, 7], [0, 1, 9]], radius=2)
    print(result)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值