题目大意:找到距离(0,0)点最近的K个点。
解题思路:计算每个点到(0,0)点的距离,最后再排序即可。
解决这道题的关键在于如何选择数据结构。
使用map存放点和距离两个变量。由于map本身是对key值排序的,若要对value排序,需要将map的key和value转到vector<pair<变量,变量>>中,然后在使用一下sort(point.begin(),point.end(),cmp)排序,具体的方法参照https://blog.csdn.net/theonegis/article/details/48549887。
源码附上:
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
map<vector<int>,int> map;
vector<pair<vector<int>,int>> res;
vector<vector<int>> v;
for(int i=0;i<points.size();i++)
{
int sum=0;
for(int j=0;j<2;j++)
{
sum+=pow(points[i][j],2);
}
map[points[i]]=sum;
res.push_back(pair<vector<int>,int>(points[i],sum));
}
sort(res.begin(),res.end(),cmp);
for(int j=0;j<K;j++)
{
v.push_back(res[j].first);
}
return v;
}
static bool cmp(pair<vector<int>,int> a,pair<vector<int>,int> b)
{
return a.second<b.second;
}
};
最后备注一下,用上面的程序运行效率不高。