首页 > 其他分享 >「模拟」找到最近的有相同 X 或 Y 坐标的点(力扣第1779题)

「模拟」找到最近的有相同 X 或 Y 坐标的点(力扣第1779题)

时间:2022-12-01 17:34:05浏览次数:66  
标签:下标 minLen int 1779 距离 力扣 points 坐标

本题为12月1日力扣每日一题

题目来源:力扣第1779题

题目tag:模拟

题面

题目描述

给你两个整数 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^4 $
points[i].length == 2
1 <= x, y, ai, bi <= $ 10^4 $


思路分析

很简单的一道模拟题,直接按照题意做就行.

参考代码

class Solution
{
public:
    int nearestValidPoint(int x, int y, vector<vector<int>> &points)
    {
        int res = -1, minLen = 0x3f3f3f3f; // 存放最大距离点的下标和最大距离
        for (int i = 0; i < points.size(); i++)
        {
            if (points[i][0] == x && minLen > fabs(points[i][1] - y)) // x坐标相同且距离更小
            {
                // 更新两个数据
                res = i;
                minLen = fabs(points[i][1] - y);
            }
            else if (points[i][1] == y && minLen > fabs(points[i][0] - x)) // y坐标相同且距离更小
            {
                // 更新两个数据
                res = i;
                minLen = fabs(points[i][0] - x);
            }
        }
        return res;
    }
};

"正是我们每天反复做的事情,最终造就了我们,优秀不是一种行为,而是一种习惯" ---亚里士多德

标签:下标,minLen,int,1779,距离,力扣,points,坐标
From: https://www.cnblogs.com/geministar/p/LeetCode1779.html

相关文章

  • 力扣275(jav&python)-H 指数 II(中等)
    题目:给你一个整数数组citations,其中citations[i]表示研究者的第i篇论文被引用的次数,citations已经按照 升序排列 。计算并返回该研究者的h 指数。h指数的定......
  • 力扣02 两数相加
    力扣02两数相加题目:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形......
  • python-解力扣题【回文数】
    1.题目以及解题代码解题思路:将整数转换成字符串,然后对比反转后的字符串与原字符串对比,相同就返回true ......
  • 找到最近的有相同 X 或 Y 坐标的点
    题目给你两个整数 x和 y ,表示你在一个笛卡尔坐标系下的 (x,y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i]=[ai,bi] 表示在 (ai,bi) ......
  • 1779. 找到最近的有相同 X 或 Y 坐标的点 ----- 模拟
    给你两个整数 x和 y ,表示你在一个笛卡尔坐标系下的 (x,y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i]=[ai,bi] 表示在 (ai,bi) 处有一......
  • 1779. 找到最近的有相同 X 或 Y 坐标的点
    1779.找到最近的有相同X或Y坐标的点classSolution{publicintnearestValidPoint(intx,inty,int[][]points){intn=points.length;......
  • 1779. 找到最近的有相同 X 或 Y 坐标的点
    找到最近的有相同X或Y坐标的点给你两个整数 x和 y ,表示你在一个笛卡尔坐标系下的 (x,y) 处。同时,在同一个坐标系下给你一个数组 points ,其中 points[i]=......
  • 力扣15 三数之和
    题目:给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返......
  • 力扣 leetcode 162. 寻找峰值
    问题描述峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即......
  • 力扣 leetcode 153. 寻找旋转排序数组中的最小值
    问题描述已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4......