/* Problem: https://leetcode.com/problems/k-closest-points-to-origin/ */ #include "lib_leetcode.h" #include #include #include #include #include struct coord_dist { int x; int y; double distance; bool operator<(const coord_dist &other) const { return distance < other.distance; } }; std::ostream &operator<<(std::ostream &out, const coord_dist &cd) { out << "x: " << cd.x << "\ty: " << cd.y << "\tdistance: " << cd.distance; return out; } std::ostream &operator<<(std::ostream &out, std::vector &cd_vec) { if (!cd_vec.size()) { out << "{}"; return out; } out << "{\n"; for (const coord_dist &cd : cd_vec) { out << '\t' << cd << ",\n"; } out << "\b\b\n}"; return out; } std::vector> solution(std::vector> &&points, int k) { std::vector distances; for (const std::vector &coordinates : points) { int x = coordinates[0], y = coordinates[1]; double distance; distance = std::sqrt(x * x + y * y); distances.push_back({x, y, distance}); } std::sort(distances.begin(), distances.end()); // std::cout << distances << '\n'; std::vector> kClosest; for (int i = 0; i < k; i++) kClosest.push_back({distances[i].x, distances[i].y}); return kClosest; } int main() { std::cout << solution({{1, 3}, {-2, 2}}, 1) << '\n' << solution({{3, 3}, {5, -1}, {-2, 4}}, 2) << '\n' << solution({{-5, 4}, {-6, -5}, {4, 6}}, 2) << '\n'; }