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
program main
implicit none
integer, parameter :: n = 2
integer, dimension(n) :: nums = (/ 3, 5 /)
integer :: x
x = special(nums)
write (*, '(I0)') x
contains
function special(nums) result(x)
implicit none
integer, intent(in) :: nums(:)
integer :: x, i, count
do i = 1, size(nums)
count = count_if(nums > i)
if (count == i) then
x = i
exit
end if
end do
if (x < 0) then
x = -1
end if
end function special
end program main
temp.f95:19:20: 19 | count = count_if(nums > i) | 1 Error: Function ‘count_if’ at (1) has no IMPLICIT type
module special_array
implicit none
contains
function special_array(nums) result(x)
! Given an array of non-negative integers, return the special value x
! if the array is special, otherwise return -1.
! It can be proven that if nums is special, the value for x is unique.
integer, intent(in) :: nums(:)
integer :: x
! Edge case: if the array is empty, return -1
if (size(nums) == 0) then
x = -1
return
endif
! Initialize variables
integer :: i, j, count
integer :: min_count, min_x
logical :: found
! Initialize the minimum count and x
min_count = huge(min_count)
min_x = -1
! Loop through the array and find the minimum count and x
do i = 1, size(nums)
count = 0
do j = 1, size(nums)
if (nums(j) >= i) then
count = count + 1
endif
enddo
if (count < min_count) then
min_count = count
min_x = i
endif
enddo
! Check if the array is special
found = .false.
do i = 1, size(nums)
if (nums(i) >= min_x) then
found = .true.
exit
endif
enddo
! Return the special value x if the array is special, otherwise return -1
if (found) then
x = min_x
else
x = -1
endif
end function special_array
end module special_array
program test_special_array
use special_array
implicit none
! Test case 1: [3, 5]
write (*,*) special_array([3, 5])
! Test case 2: [0, 0]
write (*,*) special_array([0, 0])
! Test case 3: [0, 4, 3, 0, 4]
write (*,*) special_array([0, 4, 3, 0, 4])
end program test_special_array
temp.f95:7:22: 7 | function special_array(nums) result(x) | 1 Error: MODULE attribute of ‘special_array’ conflicts with PROCEDURE attribute at (1) temp.f95:13:30: 13 | integer, intent(in) :: nums(:) | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:14:12: 14 | integer :: x | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:17:25: 17 | if (size(nums) == 0) then | 1 Error: Unexpected block IF statement in CONTAINS section at (1) temp.f95:18:10: 18 | x = -1 | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:19:10: 19 | return | 1 Error: Unexpected RETURN statement in CONTAINS section at (1) temp.f95:20:3: 20 | endif | 1 Error: Expecting END MODULE statement at (1) temp.f95:23:22: 23 | integer :: i, j, count | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:24:27: 24 | integer :: min_count, min_x | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:25:16: 25 | logical :: found | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:28:27: 28 | min_count = huge(min_count) | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:29:10: 29 | min_x = -1 | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:32:20: 32 | do i = 1, size(nums) | 1 Error: Unexpected DO statement in CONTAINS section at (1) temp.f95:33:13: 33 | count = 0 | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:34:24: 34 | do j = 1, size(nums) | 1 Error: Unexpected DO statement in CONTAINS section at (1) temp.f95:35:30: 35 | if (nums(j) >= i) then | 1 Error: Unexpected block IF statement in CONTAINS section at (1) temp.f95:36:29: 36 | count = count + 1 | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:37:11: 37 | endif | 1 Error: Expecting END MODULE statement at (1) temp.f95:38:7: 38 | enddo | 1 Error: Expecting END MODULE statement at (1) temp.f95:39:31: 39 | if (count < min_count) then | 1 Error: Unexpected block IF statement in CONTAINS section at (1) temp.f95:40:25: 40 | min_count = count | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:41:17: 41 | min_x = i | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:42:7: 42 | endif | 1 Error: Expecting END MODULE statement at (1) temp.f95:43:3: 43 | enddo | 1 Error: Expecting END MODULE statement at (1) temp.f95:46:15: 46 | found = .false. | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:47:20: 47 | do i = 1, size(nums) | 1 Error: Unexpected DO statement in CONTAINS section at (1) temp.f95:48:30: 48 | if (nums(i) >= min_x) then | 1 Error: Unexpected block IF statement in CONTAINS section at (1) temp.f95:49:22: 49 | found = .true. | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:50:12: 50 | exit | 1 Error: EXIT statement at (1) is not within a construct temp.f95:51:7: 51 | endif | 1 Error: Expecting END MODULE statement at (1) temp.f95:52:3: 52 | enddo | 1 Error: Expecting END MODULE statement at (1) temp.f95:55:15: 55 | if (found) then | 1 Error: Unexpected block IF statement in CONTAINS section at (1) temp.f95:56:13: 56 | x = min_x | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:57:4: 57 | else | 1 Error: Unexpected ELSE statement in CONTAINS section at (1) temp.f95:58:10: 58 | x = -1 | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:59:3: 59 | endif | 1 Error: Expecting END MODULE statement at (1) temp.f95:61:3: 61 | end function special_array | 1 Error: Expecting END MODULE statement at (1) temp.f95:67:5: 67 | use special_array | 1 Fatal Error: Cannot open module file ‘special_array.mod’ for reading at (1): No such file or directory compilation terminated.
def specialArray(nums):
max_val = max(nums)
for x in range(1, max_val + 1):
count = sum([1 for num in nums if num >= x])
if count == x:
return x
return -1
nums
.[1, max_val]
(both inclusive) and for each value of x
, count the elements greater than or equal to x
in the input array.x
, return x
.x
is found, return -1
.int specialArray(vector<int>& nums) {
int max_val = *max_element(nums.begin(), nums.end());
for (int x = 1; x <= max_val; ++x) {
int count = 0;
for (int num : nums) {
if (num >= x) count++;
}
if (count == x) return x;
}
return -1;
}
nums
.[1, max_val]
(both inclusive) and for each value of x
, count the elements greater than or equal to x
in the input array.x
, return x
.x
is found, return -1
.