LeetCode 973. K най-близки точки до произхода
class Solution { public: vector<vector<int>> kClosest(vector<vector<int>>& points, int K) { vector<pair<vector<int>, int>> temp; vector<vector<int>> res; for (auto elem : points) { int dist = elem[0]*elem[0] + elem[1]*elem[1]; temp.push_back(pair(elem, dist)); } sort(temp.begin(), temp.end(), [](pair<vector<int>, int>& a, pair<vector<int>, int>& b){return a.second<b.second;}); for (int i =0; i<K; i++) { res.push_back(temp[i].first); } return res; } };
- използвайте
pair<vector<int>, int>
структура от данни, къдетоfirst
е местоположението на мрежата, аsecond
е разстоянието от началото. - използвайте функцията
sort
, съчетана с функцията за сравнениеlambda
катоcmp
, за да сортиратеtemp
където запазва всичкиpair
от дадени точки на местоположение и съответното им разстояние до началото. - връща първите
k
елемента като резултати.
Версия с чист код с подобна идея може да се отнася до тук от lee215
vector<vector<int>> kClosest(vector<vector<int>>& points, int K) {
sort(points.begin(), points.end(), [](vector<int>& a, vector<int>& b) {
return a[0] * a[0] + a[1] * a[1] < b[0] * b[0] + b[1] * b[1];
});
return vector<vector<int>>(points.begin(), points.begin() + K);
}