[随缘一题]雷达监测

来源

lintcode-雷达监测

描述

一个2D平面上有一堆雷达(雷达有x, y坐标,以及能探测到的范围r半径)。现在有一辆小车要从y = 0和y = 1的区间里面通过并且不能被雷达探测到。若被检测到,输出YES,否则输出NO。(可以认为,小车是一条长度为1的线段,沿直线从x = 0 向右前进)

  • 雷达数量为n,n <= 1000。
  • 雷达的坐标x为非负整数,y为整数,r为正整数。

样例

给出 coordinates = [[0,2]], radius = [1], 返回 “NO”。

1
2
解释:
在(0,2)处有个雷达,它能探测到以(0,2)为圆心,半径为1的圆形区域,小车不会被检测到。

给出 coordinates = [[0,2],[1,2]], radius = [1,2], 返回 “YES”。

1
2
解释:
在(0,2)处有个雷达,它能探测到以(0,2)为圆心,半径为2的圆形区域,(1,2)处的雷达能探测到以(1,2)为圆心,2为半径的圆形区域。2号雷达可以探测到小车经过。

解题思路

题目好复杂啊,其实就是判断一个圆有没有覆盖x轴.

由我们的数学知识可以知道,直接用(圆心坐标的y轴的绝对值)减去半径,如果小于等于0,则说明这个圆覆盖到了x轴.

否则则认为没有覆盖.

实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public String radarDetection(Point[] coordinates, int[] radius) {
// Write your code here
for (int i=0;i < coordinates.length;i++){
//如果圆心的y轴绝对值减去半径小于等于0,说明被监测到,直接返回YES
if (Math.abs(coordinates[i].y) - radius[i] <= 0){
return "YES";
}
}
//如果所有圆都没有覆盖,则返回NO
return "NO";
}

//类
class Point {

int x;
int y;

Point() {
x = 0;
y = 0;
}

Point(int a, int b) {
x = a;
y = b;
}
}

完。




ChangeLog

2019-01-04 完成

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客——>呼延十