leetcode-973最接近原點的K個點
阿新 • • 發佈:2019-01-13
平面 也會 之間 leetcode break double () color 遍歷
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 };
leetcode-973最接近原點的K個點