[随缘一题]雷达监测

Posted1 by 呼延十 on January 4, 2019 Hot:

来源

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”。

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

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

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

解题思路

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

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

否则则认为没有覆盖.

实现代码

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

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