Back to challenges
Medium 0 solved 0% acceptance

K-th Smallest Element

Find the k-th smallest value without fully sorting.

What you'll learn

  • Partition values around a pivot
  • Recurse into one side only
  • Find the k-th smallest in average linear time

Problem

Return the k-th smallest value of the list (k counts from 1). Quickselect finds it in average O(n) time without sorting everything.

Implement kth_smallest(numbers, k).

Input

numbers: The list of integers. k: Which smallest value to return, starting at 1.

Output

Return the k-th smallest value.

Constraints

1 ≤ k ≤ length ≤ 200,000

Examples

Example 1
Input:
k = 3
numbers = [7, 10, 4, 3, 20, 15]

Expected output:
expected = 7
Input:
long long k = 3;
std::vector<long long> numbers = {7, 10, 4, 3, 20, 15};

Expected output:
long long expected = 7;
Input:
long k = 3;
long[] numbers = new long[] {7, 10, 4, 3, 20, 15};

Expected output:
long expected = 7;

Explanation

Sorted: 3, 4, 7, 10, 15, 20; the 3rd smallest is 7.

Example 2
Input:
k = 2
numbers = [5, 5, 1]

Expected output:
expected = 5
Input:
long long k = 2;
std::vector<long long> numbers = {5, 5, 1};

Expected output:
long long expected = 5;
Input:
long k = 2;
long[] numbers = new long[] {5, 5, 1};

Expected output:
long expected = 5;

Explanation

Sorted: 1, 5, 5; the 2nd smallest is 5 (duplicates count).

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

You only need the element that would sit in position k after sorting, not the fully sorted list.

Hint 2

Partition around a pivot and recurse or iterate only into the side that can still contain the target rank.

Hint 3

Remember that k is one-based, and duplicates must still count as separate positions.

Expected complexity

O(n) average time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.