开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
死亡周四,要单独部署了,全面解封了
找到最近的有相同 X 或 Y 坐标的点
该题出自力扣的1779题 —— 找到最近的有相同 X 或 Y 坐标的点【简单题】,又是简单题,重拳出击!!!
审题
给你两个整数 x 和 y ,表示你在一个笛卡尔坐标系下的 (x, y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i] = [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时,我们称这个点是 有效的 。 请返回距离你当前位置 曼哈顿距离 最近的 有效 点的下标(下标从 0 开始)。如果有多个最近的有效点,请返回下标 最小 的一个。如果没有有效点,请返回 -1 。 两个点 (x1, y1) 和 (x2, y2) 之间的 曼哈顿距离 为 abs(x1 - x2) + abs(y1 - y2) 。
- 这道题因为是简单题,基本上把解法都写在题目里面了,只需要把相关解法解析成编程语言即可
- 给出两个变量,x、y代表坐标轴的两个变量
- 给出一个二维数组,里面存储着一对对的坐标
- 找出有效坐标的前提下:x坐标或者y坐标相等时,曼哈顿距离最小的值
- 公式也给了: 两个坐标的绝对值差
- 如果有多个最小,那么返回最小坐标的那位
- 那就很好理解了,遍历整个二维数组,那就能解决返回最小坐标的问题
- 利用函数Math.abs计算曼哈顿的距离,只有大于的时候才能覆盖值,那最后就能返回第一个最小的下标
编码
class Solution {
public int nearestValidPoint(int x, int y, int[][] points) {
int result = Integer.MAX_VALUE;
int index = -1;
for (int i = 0;i<points.length;i++) {
int[] a = points[i];
if (a[0] == x || a[1] == y){
int j = Math.abs(x - a[0]) + Math.abs(y - a[1]);
if (result > j){
result = j;
index = i;
}
}
}
return index;
}
}