解题思路
很朴(fei)实(jin)的一种解法
对于每一个点,使用 pair 存储存储其在原始数组中的下标和到原点的距离
对 pair 排序,将排序前 K 位的元素对应的点存入答案容器
C++代码
class Solution {
public:
//注意声明为 static ,否则无法通过编译
static bool cmp(pair<int, int>a, pair<int, int>b) {
return a.second < b.second;
}
vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
vector<pair<int, int>> res;
for (int i = 0; i < points.size(); i++) {
res.emplace_back(make_pair(i, pow(points[i][0], 2) + pow(points[i][1], 2)));
}
sort(res.begin(), res.end(), cmp);
vector<vector<int>> ans;
for (int i = 0; i < K; i++) {
ans.emplace_back(points[res[i].first]);
}
return ans;
}
};
要注意的是,在leetcode的OJ中,如果不把第4行的cmp函数声明为 static 格式,会有如下报错:
error: reference to non-static member function must be called
具体原因可以参考这篇文章
详解 error: reference to non-static member function must be called