思路:建立一个pair数组vec,每一个元素保存points的索引和坐标距远点的距离值,然后对vec进行排序,排序按照pair的值,最后从前到后输出k个点到返回值中即可;为什么不用map?因为不能直接对map中的元素进行排序,如果map的键放距离,值放索引,那么会存在多个索引对应一个距离值得情况,而map只会保留一个索引值,除非你用索引数组,这样就比较麻烦了;
//排序函数 按值排序
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)
{
int len = points.size();
vector<pair<int, int>> vec(len);
for (int i = 0; i < len; i++)
{
int x = points[i][0], y = points[i][1];
vec[i] = pair<int, int>(i, x * x + y * y);
}
sort(vec.begin(), vec.end(), cmp);
vector<vector<int>> res;
for (auto s:vec)
{
if (K--)
{
res.push_back(points[s.first]);
}
else
{
break;
}
}
return res;
}