1779:找到最近的有相同 X 或 Y 坐标的点

This commit is contained in:
轩辕龙儿 2022-04-14 08:59:20 +08:00
parent b21dde85fc
commit 9b068e97dd
2 changed files with 121 additions and 0 deletions

View File

@ -0,0 +1,82 @@
//给你两个整数 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)
//
//
//
// 示例 1
//
//
//输入x = 3, y = 4, points = [[1,2],[3,1],[2,4],[2,3],[4,4]]
//输出2
//解释所有点中[3,1][2,4] [4,4] 是有效点有效点中[2,4] [4,4] 距离你当前位置的曼哈顿距离最小都为 1 [2,4
//] 的下标最小所以返回 2
//
// 示例 2
//
//
//输入x = 3, y = 4, points = [[3,4]]
//输出0
//提示答案可以与你当前所在位置坐标相同
//
// 示例 3
//
//
//输入x = 3, y = 4, points = [[2,3]]
//输出-1
//解释没有 有效点
//
//
//
// 提示
//
//
// 1 <= points.length <= 10
// points[i].length == 2
// 1 <= x, y, ai, bi <= 10
//
// Related Topics 数组 👍 26 👎 0
package leetcode.editor.cn;
//1779:找到最近的有相同 X Y 坐标的点
public class FindNearestPointThatHasTheSameXOrYCoordinate {
public static void main(String[] args) {
Solution solution = new FindNearestPointThatHasTheSameXOrYCoordinate().new Solution();
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int nearestValidPoint(int x, int y, int[][] points) {
int index = -1;
int minDistance = Integer.MAX_VALUE;
for (int i = 0; i < points.length; i++) {
//边界1坐标与xy相同直接返回下标
if ((points[i][0] == x) && (points[i][1] == y)) {
return i;
}
//边界2坐标与xy都不相同直接进入下一循环不参与distance计算
if ((points[i][0] != x) && (points[i][1] != y)) {
continue;
}
//若坐标中只有一个值与x or y匹配
if ((points[i][0] == x) || (points[i][1] == y)) {
int distance = Math.abs(points[i][0] - x) + Math.abs(points[i][1] - y);
if (distance < minDistance) {
minDistance = distance;
index = i;
}
}
}
return index;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,39 @@
<p>给你两个整数&nbsp;<code>x</code>&nbsp;<code>y</code>&nbsp;,表示你在一个笛卡尔坐标系下的&nbsp;<code>(x, y)</code>&nbsp;处。同时,在同一个坐标系下给你一个数组&nbsp;<code>points</code>&nbsp;,其中&nbsp;<code>points[i] = [a<sub>i</sub>, b<sub>i</sub>]</code>&nbsp;表示在&nbsp;<code>(a<sub>i</sub>, b<sub>i</sub>)</code>&nbsp;处有一个点。当一个点与你所在的位置有相同的 <code>x</code> 坐标或者相同的 <code>y</code> 坐标时,我们称这个点是 <b>有效的</b>&nbsp;</p>
<p>请返回距离你当前位置&nbsp;<strong>曼哈顿距离</strong>&nbsp;最近的&nbsp;<strong>有效</strong>&nbsp;点的下标(下标从 <strong>0</strong> 开始)。如果有多个最近的有效点,请返回下标&nbsp;<strong>最小</strong>&nbsp;的一个。如果没有有效点,请返回&nbsp;<code>-1</code>&nbsp;</p>
<p>两个点 <code>(x<sub>1</sub>, y<sub>1</sub>)</code>&nbsp;<code>(x<sub>2</sub>, y<sub>2</sub>)</code>&nbsp;之间的 <strong>曼哈顿距离</strong>&nbsp;&nbsp;<code>abs(x<sub>1</sub> - x<sub>2</sub>) + abs(y<sub>1</sub> - y<sub>2</sub>)</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>x = 3, y = 4, points = [[1,2],[3,1],[2,4],[2,3],[4,4]]
<b>输出:</b>2
<b>解释:</b>所有点中,[3,1][2,4] 和 [4,4] 是有效点。有效点中,[2,4] 和 [4,4] 距离你当前位置的曼哈顿距离最小,都为 1 。[2,4] 的下标最小,所以返回 2 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>x = 3, y = 4, points = [[3,4]]
<b>输出:</b>0
<b>提示:</b>答案可以与你当前所在位置坐标相同。</pre>
<p><strong>示例 3</strong></p>
<pre>
<b>输入:</b>x = 3, y = 4, points = [[2,3]]
<b>输出:</b>-1
<b>解释:</b>没有 有效点。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= points.length &lt;= 10<sup>4</sup></code></li>
<li><code>points[i].length == 2</code></li>
<li><code>1 &lt;= x, y, a<sub>i</sub>, b<sub>i</sub> &lt;= 10<sup>4</sup></code></li>
</ul>
<div><div>Related Topics</div><div><li>数组</li></div></div><br><div><li>👍 26</li><li>👎 0</li></div>