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] <= 1000program 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.