Build Array from Permutation

🏠 ⬅️ ➡️

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
  • The elements in nums are distinct.

Follow-up: Can you solve it without using an extra space (i.e., O(1) memory)?


Note: This problem is from LeetCode.
Compiled
Executed
Correct
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
Compiled
Executed
Correct
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
🌐 Data from online sources
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.

🌐 Data from online sources
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.