Watch 10 video solutions for Special Array With X Elements Greater Than or Equal X, a easy level problem involving Array, Binary Search, Sorting. This walkthrough by NeetCodeIO has 13,663 views views. Want to try solving it yourself? Practice on FleetCode or read the detailed text solution.
You are given an array nums of non-negative integers. nums is considered special if there exists a number x such that there are exactly x numbers in nums that are greater than or equal to x.
Notice that x does not have to be an element in nums.
Return x if the array is special, otherwise, return -1. It can be proven that if nums is special, the value for x is unique.
Example 1:
Input: nums = [3,5] Output: 2 Explanation: There are 2 values (3 and 5) that are greater than or equal to 2.
Example 2:
Input: nums = [0,0] Output: -1 Explanation: No numbers fit the criteria for x. If x = 0, there should be 0 numbers >= x, but there are 2. If x = 1, there should be 1 number >= x, but there are 0. If x = 2, there should be 2 numbers >= x, but there are 0. x cannot be greater since there are only 2 numbers in nums.
Example 3:
Input: nums = [0,4,3,0,4] Output: 3 Explanation: There are 3 values that are greater than or equal to 3.
Constraints:
1 <= nums.length <= 1000 <= nums[i] <= 1000Problem Overview: You receive an integer array nums. The goal is to find a number x such that exactly x elements in the array are greater than or equal to x. If such a value exists, return it. Otherwise return -1. The value of x must be consistent with the count of elements meeting the condition.
Approach 1: Sorting and Linear Scan (Time: O(n log n), Space: O(1) or O(n) depending on sort)
Sort the array in non-decreasing order using a standard sorting algorithm. After sorting, iterate through the array and treat each position as a potential boundary where x elements remain on the right. If the array has n elements and you are at index i, then there are n - i elements that are >= nums[i]. Check whether n - i could be the special value by verifying that nums[i] >= n - i and the previous element (if it exists) is < n - i. The first position that satisfies this condition gives the correct x. Sorting groups smaller values on the left and larger ones on the right, which makes counting elements greater than or equal to a candidate value straightforward.
Approach 2: Binary Search on Result (Time: O(n log n), Space: O(1))
The possible value of x ranges from 0 to n. Instead of testing all values linearly, apply binary search on this range. For each candidate x, iterate through the array and count how many elements are >= x. If the count equals x, you found the special value. If the count is larger than x, move the search range higher; if smaller, move it lower. The binary search reduces the number of candidate checks while the counting step validates the condition. This technique is known as binary search on the answer, a common pattern for problems where the result lies within a numeric range.
Both approaches operate directly on the array and rely on counting elements that satisfy a threshold condition. The sorting approach leverages order to compute counts quickly from indices, while the binary search approach repeatedly evaluates candidate answers.
Recommended for interviews: The sorting and linear scan solution is usually the expected answer. It is simple, deterministic, and easy to reason about after ordering the array. Binary search on the result demonstrates stronger algorithmic thinking and familiarity with the "search on answer" pattern, but the sorting approach is typically faster to implement during interviews while still achieving optimal practical performance.
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Sorting and Linear Scan | O(n log n) | O(1) or O(n) | Best general solution; easy to reason about once the array is sorted |
| Binary Search on Result | O(n log n) | O(1) | Useful when practicing binary search on answer or when the valid result lies within a bounded numeric range |