当前位置: 面试刷题>> k个最近的点 (经典算法题500道)


### 题目描述补充 题目:**k个最近的点** 给定一个二维平面上的n个点(每个点由(x, y)坐标表示)和一个查询点Q(qx, qy),请找出距离查询点Q最近的k个点。距离定义为欧几里得距离,即两点(x1, y1)和(x2, y2)之间的距离为sqrt((x2-x1)^2 + (y2-y1)^2)。 ### 示例代码 以下是使用Python、PHP和JavaScript编写的示例代码,用于找到距离查询点最近的k个点。 #### Python 示例 ```python import math from typing import List, Tuple def distance(p1: Tuple[float, float], p2: Tuple[float, float]) -> float: return math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2) def k_nearest_points(points: List[Tuple[float, float]], query: Tuple[float, float], k: int) -> List[Tuple[float, float]]: # 使用列表推导和排序(按距离) distances_and_points = sorted([(distance(query, p), p) for p in points]) return [p for _, p in distances_and_points[:k]] # 示例 points = [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)] query = (4, 4) k = 3 print(k_nearest_points(points, query, k)) ``` #### PHP 示例 ```php ``` #### JavaScript 示例 ```javascript function distance(p1, p2) { const dx = p2[0] - p1[0]; const dy = p2[1] - p1[1]; return Math.sqrt(dx * dx + dy * dy); } function kNearestPoints(points, query, k) { return points .map(p => [distance(query, p), p]) .sort((a, b) => a[0] - b[0]) .slice(0, k) .map(item => item[1]); } // 示例 const points = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]; const query = [4, 4]; const k = 3; console.log(kNearestPoints(points, query, k)); ``` 以上代码分别用Python、PHP和JavaScript实现了查找二维平面上距离查询点最近的k个点的功能。这些示例简单明了,适合作为面试准备或学习算法的参考。码小课网站中还有更多相关内容分享给大家学习,欢迎访问。
推荐面试题