973. K Closest Points to Origin LeetCode Solution
In this guide, you will get 973. K Closest Points to Origin LeetCode Solution with the best time and space complexity. The solution to K Closest Points to Origin problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- K Closest Points to Origin solution in C++
- K Closest Points to Origin solution in Java
- K Closest Points to Origin solution in Python
- Additional Resources

Problem Statement of K Closest Points to Origin
Given an array of points where points[i] = [xi, yi] represents a point on the X-Y plane and an integer k, return the k closest points to the origin (0, 0).
The distance between two points on the X-Y plane is the Euclidean distance (i.e., √(x1 – x2)2 + (y1 – y2)2).
You may return the answer in any order. The answer is guaranteed to be unique (except for the order that it is in).
Example 1:
Input: points = [[1,3],[-2,2]], k = 1
Output: [[-2,2]]
Explanation:
The distance between (1, 3) and the origin is sqrt(10).
The distance between (-2, 2) and the origin is sqrt(8).
Since sqrt(8) < sqrt(10), (-2, 2) is closer to the origin.
We only want the closest k = 1 points from the origin, so the answer is just [[-2,2]].
Example 2:
Input: points = [[3,3],[5,-1],[-2,4]], k = 2
Output: [[3,3],[-2,4]]
Explanation: The answer [[-2,4],[3,3]] would also be accepted.
Constraints:
1 <= k <= points.length <= 104
-104 <= xi, yi <= 104
Complexity Analysis
- Time Complexity: O(n\log K)
- Space Complexity: O(K)
973. K Closest Points to Origin LeetCode Solution in C++
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int k) {
vector<vector<int>> ans;
auto compare = [&](const vector<int>& a, const vector<int>& b) {
return squareDist(a) < squareDist(b);
};
priority_queue<vector<int>, vector<vector<int>>, decltype(compare)> maxHeap(
compare);
for (const vector<int>& point : points) {
maxHeap.push(point);
if (maxHeap.size() > k)
maxHeap.pop();
}
while (!maxHeap.empty())
ans.push_back(maxHeap.top()), maxHeap.pop();
return ans;
};
private:
int squareDist(const vector<int>& p) {
return p[0] * p[0] + p[1] * p[1];
}
};
/* code provided by PROGIEZ */
973. K Closest Points to Origin LeetCode Solution in Java
class Solution {
public int[][] kClosest(int[][] points, int k) {
int[][] ans = new int[k][2];
Queue<int[]> maxHeap =
new PriorityQueue<>((a, b) -> Integer.compare(squareDist(b), squareDist(a)));
for (int[] point : points) {
maxHeap.offer(point);
if (maxHeap.size() > k)
maxHeap.poll();
}
int i = k;
while (!maxHeap.isEmpty())
ans[--i] = maxHeap.poll();
return ans;
}
private int squareDist(int[] p) {
return p[0] * p[0] + p[1] * p[1];
}
}
// code provided by PROGIEZ
973. K Closest Points to Origin LeetCode Solution in Python
class Solution:
def kClosest(self, points: list[list[int]], k: int) -> list[list[int]]:
maxHeap = []
for x, y in points:
heapq.heappush(maxHeap, (- x * x - y * y, [x, y]))
if len(maxHeap) > k:
heapq.heappop(maxHeap)
return [pair[1] for pair in maxHeap]
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.