LeetCode 1608. Special Array With X Elements Greater Than or Equal X Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
1608. Special Array With X Elements Greater Than or Equal X

Description

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 <= 100
  • 0 <= nums[i] <= 1000

Solutions

Solution 1: Brute Force Enumeration

We enumerate x in the range of [1..n], and then count the number of elements in the array that are greater than or equal to x, denoted as cnt. If there exists cnt equal to x, return x directly.

The time complexity is O(n2), where n is the length of the array. The space complexity is O(1).

PythonJavaC++GoTypeScriptRust
class Solution: def specialArray(self, nums: List[int]) -> int: for x in range(1, len(nums) + 1): cnt = sum(v >= x for v in nums) if cnt == x: return x return -1(code-box)

Solution 2: Sorting + Binary Search

We can also sort nums first.

Next, we still enumerate x, and use binary search to find the first element in nums that is greater than or equal to x, quickly counting the number of elements in nums that are greater than or equal to x.

The time complexity is O(n × log n), and the space complexity is O(log n). Where n is the length of the array.

PythonJavaC++GoTypeScriptRust
class Solution: def specialArray(self, nums: List[int]) -> int: nums.sort() n = len(nums) for x in range(1, n + 1): cnt = n - bisect_left(nums, x) if cnt == x: return x return -1(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !