Given a zero-based permutation nums
(0-indexed), build an array ans
of the same length where ans[i] = nums[nums[i]]
for each 0 <= i < nums.length
and return it.
A zero-based permutation nums
is an array of distinct integers from 0
to nums.length - 1
(inclusive).
Example 1:
Input: nums = [0,2,1,5,3,4] Output: [0,1,2,4,5,3] Explanation: The array ans is built as follows: ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]] = [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]] = [0,1,2,4,5,3]
Example 2:
Input: nums = [5,0,1,2,3,4] Output: [4,5,0,1,2,3] Explanation: The array ans is built as follows: ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]] = [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]] = [4,5,0,1,2,3]
Constraints:
1 <= nums.length <= 1000
0 <= nums[i] < nums.length
nums
are distinct.Follow-up: Can you solve it without using an extra space (i.e., O(1)
memory)?
program main
! This program solves the problem of building an array "ans" of the same length
! as the input array "nums", where ans[i] = nums[nums[i]] for each 0 <= i < nums.length.
! The input array "nums" is a zero-based permutation, meaning that its elements are
! distinct integers from 0 to nums.length - 1 (inclusive).
!
! Example 1:
! Input: nums = [0,2,1,5,3,4]
! Output: [0,1,2,4,5,3]
! Explanation: The array ans is built as follows:
! ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
! = [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]
! = [0,1,2,4,5,3]
!
! Example 2:
! Input: nums = [5,0,1,2,3,4]
! Output: [4,5,0,1,2,3]
! Explanation: The array ans is built as follows:
! ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
! = [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]]
! = [4,5,0,1,2,3]
!
! Constraints:
! 1 <= nums.length <= 1000
! 0 <= nums[i] < nums.length
! All the elements of nums are unique.
implicit none
integer :: i, j, k, n
integer, dimension(:), allocatable :: nums, ans
n = 6 ! number of elements in nums
allocate(nums(n))
allocate(ans(n))
nums = (/ 0, 2, 1, 5, 3, 4 /) ! example 1
! nums = (/ 5, 0, 1, 2, 3, 4 /) ! example 2
do i = 1, n
ans(i) = nums(nums(i))
end do
print '(A)', 'ans ='
do i = 1, n
print '(*(I0, 1X))', ans(i)
end do
deallocate(nums)
deallocate(ans)
end program main
ans = 0 2 0 3 1 5
module permutation_array
implicit none
contains
function permutation_array(nums) result(ans)
integer, intent(in) :: nums(:)
integer :: ans(size(nums))
! Local variables
integer :: i, j
! Initialize the answer array
ans = 0
! Loop through the input array
do i = 1, size(nums)
! Get the index of the current element
j = nums(i)
! Set the current element in the answer array
ans(i) = nums(j)
end do
end function permutation_array
end module permutation_array
program test_permutation_array
use permutation_array, only : permutation_array
implicit none
! Test case 1
print *, permutation_array([0, 2, 1, 5, 3, 4])
! Test case 2
print *, permutation_array([5, 0, 1, 2, 3, 4])
end program test_permutation_array
temp.f95:7:26: 7 | function permutation_array(nums) result(ans) | 1 Error: MODULE attribute of ‘permutation_array’ conflicts with PROCEDURE attribute at (1) temp.f95:9:30: 9 | integer, intent(in) :: nums(:) | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:10:20: 10 | integer :: ans(size(nums)) | 1 Error: Symbol ‘nums’ is used before it is typed at (1) temp.f95:13:15: 13 | integer :: i, j | 1 Error: Unexpected data declaration statement in CONTAINS section at (1) temp.f95:16:7: 16 | ans = 0 | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:19:20: 19 | do i = 1, size(nums) | 1 Error: Unexpected DO statement in CONTAINS section at (1) temp.f95:22:15: 22 | j = nums(i) | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:25:20: 25 | ans(i) = nums(j) | 1 Error: Unexpected assignment statement in CONTAINS section at (1) temp.f95:27:3: 27 | end do | 1 Error: Expecting END MODULE statement at (1) temp.f95:29:3: 29 | end function permutation_array | 1 Error: Expecting END MODULE statement at (1) temp.f95:35:47: 35 | use permutation_array, only : permutation_array | 1 Error: The name ‘permutation_array’ at (1) has already been used as an external module name temp.f95:39:8: 1 | module permutation_array | 2 ...... 39 | print *, permutation_array([0, 2, 1, 5, 3, 4]) | 1 Error: Global name ‘permutation_array’ at (1) is already being used as a MODULE at (2) temp.f95:39:26: 39 | print *, permutation_array([0, 2, 1, 5, 3, 4]) | 1 Warning: Interface mismatch in global procedure ‘permutation_array’ at (1): 'permutation_array' is not a function temp.f95:39:8: 39 | print *, permutation_array([0, 2, 1, 5, 3, 4]) | 1 Error: Function ‘permutation_array’ at (1) has no IMPLICIT type temp.f95:42:8: 1 | module permutation_array | 2 ...... 42 | print *, permutation_array([5, 0, 1, 2, 3, 4]) | 1 Error: Global name ‘permutation_array’ at (1) is already being used as a MODULE at (2) temp.f95:39:26: 39 | print *, permutation_array([0, 2, 1, 5, 3, 4]) | 1 Warning: Interface mismatch in global procedure ‘permutation_array’ at (1): 'permutation_array' is not a function temp.f95:42:8: 42 | print *, permutation_array([5, 0, 1, 2, 3, 4]) | 1 Error: Function ‘permutation_array’ at (1) has no IMPLICIT type temp.f95:39:8: 39 | print *, permutation_array([0, 2, 1, 5, 3, 4]) | 1 Error: More actual than formal arguments in procedure call at (1) temp.f95:42:8: 42 | print *, permutation_array([5, 0, 1, 2, 3, 4]) | 1 Error: More actual than formal arguments in procedure call at (1)
def square_is_white(coordinates: str) -> bool:
return (ord(coordinates[0]) - ord('a') + ord(coordinates[1]) - ord('1')) % 2 == 0
The algorithm first calculates the position of the square using the ASCII values of the characters given in the coordinate string, then the row and column positions are added together. If the sum is even, the square is a white square, otherwise it is a black square.
bool squareIsWhite(std_sequence(string coordinates) {
return (coordinates[0] - 'a' + coordinates[1] - '1') % 2 == 0;
}
The algorithm first calculates the position of the square using the ASCII values of the characters given in the coordinate string, then the row and column positions are added together. If the sum is even, the square is a white square, otherwise it is a black square.