classSolution { public: vector<vector<int>> kClosest(vector<vector<int>>& points, int K) { srand(time(NULL)); int n = points.size(), l = 0, r = n - 1; while (l <= r) { int k = partition(points, l, r); if (k == K - 1) break; if (k < K - 1) { l = k + 1; } else { r = k - 1; } } returnvector<vector<int>>(begin(points), begin(points) + K); }
intpartition(vector<vector<int>>& p, int l, int r){ vector<int> v{l, l + (r - l) / 2, r}; swap(p[l], p[v[rand() % 3]]); int j = l + 1; for (int i = j; i <= r; ++i) { if (lt(p[i], p[l])) { swap(p[i], p[j++]); } } swap(p[--j], p[l]); return j; }
classSolution { public: vector<vector<int>> kClosest(vector<vector<int>>& points, int K) { srand(time(NULL)); int n = points.size(), l = 0, r = n - 1; while (l <= r) { int k = partition(points, l, r); if (k == K - 1) break; if (k < K - 1) { l = k + 1; } else { r = k - 1; } } returnvector<vector<int>>(begin(points), begin(points) + K); }
intpartition(vector<vector<int>>& p, int l, int r){ vector<int> v{l, l + (r - l) / 2, r}; swap(p[l], p[v[rand() % 3]]); auto pivot = p[l]; while (l < r) { while (l < r && !lt(p[r], pivot)) --r; p[l] = p[r]; while (l < r && lt(p[l], pivot)) ++l; p[r] = p[l]; } p[l] = pivot; return l; }