1. 程式人生 > >leetcode-973最接近原點的K個點

leetcode-973最接近原點的K個點

平面 也會 之間 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. 1 <= K <= points.length <= 10000
  2. -10000 < points[i][0] < 10000
  3. -10000 < points[i][1] < 10000

算法

  1. 遍歷points數組,計算每一個點到原點的距離
  2. 對距離數組排序(升序)->sort函數搞定
  3. from 0 to K,遍歷距離數組
  4. 遍歷points數組
  5. 如果有距離值與當前距離數組值相等,將其加入到結果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個點