![](https://img-blog.csdnimg.cn/20201109112053609.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0lOR05JR0hU,size_16,color_FFFFFF,t_70)
链接:973. 最接近原点的 K 个点
题解:https://leetcode-cn.com/problems/k-closest-points-to-origin/solution/zui-jie-jin-yuan-dian-de-k-ge-dian-by-leetcode-sol/
![](https://img-blog.csdnimg.cn/20201109113311913.png)
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
sort(points.begin(), points.end(), [](const vector<int>& u, const vector<int>& v) {
return u[0] * u[0] + u[1] * u[1] < v[0] * v[0] + v[1] * v[1];
});
return {points.begin(), points.begin() + K};
}
};
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
vector<vector<int>> result;
if(points.size() <= 0) {
return result;
}
vector<std::pair<int, int>> table;
// 先申请空间
table.reserve(points.size());
for(int i = 0; i < points.size(); ++i) {
table.emplace_back(std::pair<int, int>(pow(points[i][0], 2) + pow(points[i][1], 2), i));
}
const auto& cmp = [](std::pair<int, int>& n1, std::pair<int, int>& n2) {
return n1.first < n2.first;
};
// 按照距离排序
sort(table.begin(), table.end(), cmp);
// 先申请空间
result.reserve(points.size());
for(int i = 0; i < K; ++i) {
result.push_back(std::move(points[table[i].second]));
}
return result;
}
};
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
vector<vector<int>> result;
if(points.size() <= 0) {
return result;
}
// pair.first值大的游戏
priority_queue<std::pair<int, int>> que;
// 时间复杂度Nlog(K), N是points.size()
for(int i = 0; i < points.size(); ++i) {
int distance = pow(points[i][0], 2) + pow(points[i][1], 2);
if(que.size() < K) {
que.push(std::pair<int, int>(distance, i));
} else if(que.top().first > distance) {
que.pop();
que.push(std::pair<int, int>(distance, i));
}
}
// 先申请空间
result.reserve(points.size());
while(!que.empty()) {
int index = que.top().second;
que.pop();
result.push_back(points[index]);
}
return result;
}
};
![](https://img-blog.csdnimg.cn/20201109114927906.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0lOR05JR0hU,size_16,color_FFFFFF,t_70)