DEV Community

Harsh Prajapat
Harsh Prajapat

Posted on

🧩 Problem Statement (LeetCode 973)

Given an array of points [[x1, y1], [x2, y2], ...] and an integer K, return the K closest points to the origin (0, 0) based on Euclidean distance.

✅ Swift Solution Using Sorting (Simple & Effective)

func kClosest(_ points: [[Int]], _ k: Int) -> [[Int]] {
    // Sort points by distance to origin (0, 0)
    let sortedPoints = points.sorted {
        let d1 = $0[0] * $0[0] + $0[1] * $0[1]
        let d2 = $1[0] * $1[0] + $1[1] * $1[1]
        return d1 < d2
    }

    return Array(sortedPoints.prefix(k))
}

// Example usage
let points = [[1,3],[-2,2],[5,8],[0,1]]
let k = 2
let result = kClosest(points, k)
print("K closest points to origin:", result)  // Output: [[-2, 2], [0, 1]]
Enter fullscreen mode Exit fullscreen mode

🧠 Explanation:

Compute the squared distance to avoid unnecessary square roots.

Sort all points based on this squared distance.

Return the first K points.

⏱️ Time Complexity:

O(n log n) for sorting

If you want O(n log k), use a max-heap (priority queue) — more
efficient for large n.

Top comments (0)