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


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 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM