leetcode-973最接近原点的K个点
题意
我们有一个由平面上的点组成的列表
points
。需要从中找出K
个距离原点(0, 0)
最近的点。(这里,平面上两点之间的距离是欧几里德距离。)
你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。
示例 1:
输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(8) < sqrt(10),(-2, 2) 离原点更近。 我们只需要距离原点最近的 K = 1 个点,所以答案就是 [[-2,2]]。示例 2:
输入:points = [[3,3],[5,-1],[-2,4]], K = 2 输出:[[3,3],[-2,4]] (答案 [[-2,4],[3,3]] 也会被接受。)
提示:
-
1 <= K <= points.length <= 10000
-
-10000 < points[i][0] < 10000
-
-10000 < points[i][1] < 10000
算法
-
遍历points数组,计算每一个点到原点的距离
-
对距离数组排序(升序)->sort函数搞定
-
from 0 to K,遍历距离数组
-
遍历points数组
-
如果有距离值与当前距离数组值相等,将其加入到结果vector(相当于数组)中。
code
1 class Solution { 2 public: 3 vector<vector<int>> kClosest(vector<vector<int>>& points, int K) { 4 double a[10000] = {0}; 5 vector< vector<int> > ans(K, vector<int>(2, 0)); 6 for(int i=0; i<points.size(); i++) 7 { 8 a[i] = sqrt(points[i][0]*points[i][0] + points[i][1]*points[i][1]); 9 } 10 sort(a, a+points.size()); 11 for(int j=0; j<K; j++) 12 { 13 for(int t=0; t<points.size(); t++) 14 { 15 if(sqrt(points[t][0]*points[t][0] + points[t][1]*points[t][1]) == a[j]) 16 { 17 ans[j][0] = points[t][0]; 18 ans[j][1] = points[t][1]; 19 break; 20 } 21 } 22 } 23 return ans; 24 } 25 };