""" 1920.1 - Solution 1 - Direct Mapping """
#####################################################################################
# Imports
#####################################################################################
from typing import List
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def buildArray(self, nums: List[int]) -> List[int]:
"""Build Array from Permutation"""
return [nums[nums[i]] for i in range(len(nums))]
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().buildArray([0, 2, 1, 5, 3, 4])) # [0, 1, 2, 4, 5, 3]
print(Solution().buildArray([5, 0, 1, 2, 3, 4])) # [4, 5, 0, 1, 2, 3]
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()
""" 1920.2 - Solution 2 - In-Place using Modular Arithmetic """
#####################################################################################
# Imports
#####################################################################################
from typing import List
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def buildArray(self, nums: List[int]) -> List[int]:
"""Build Array from Permutation (In-Place)"""
n = len(nums)
# First pass: encode both old and new values
for i in range(n):
# nums[nums[i]] % n gives the original value at nums[i] position
# (it may already be modified, so we use % n to recover original)
nums[i] += (nums[nums[i]] % n) * n
# Second pass: extract the new values
for i in range(n):
nums[i] //= n
return nums
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().buildArray([0, 2, 1, 5, 3, 4])) # [0, 1, 2, 4, 5, 3]
print(Solution().buildArray([5, 0, 1, 2, 3, 4])) # [4, 5, 0, 1, 2, 3]
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()