Brute Force with O(N) space
class Solution:
def buildArray(self, nums: List[int]) -> List[int]:
"""tc O(N) sc O(N)
"""
n = len(nums)
A = [None]*n
for i,x in enumerate(nums):
A[i] = nums[x]
return A
O(1) inplace optimization
class Solution:
def buildArray(self, A: List[int]) -> List[int]:
"""tc O(N) sc O(1)
main idea: Euclidean division a = q*b + r where r is original A[i], b: encoded r => A[A[j]] at pos i
"""
q = len(A)
for i in range(q):
r = A[i]
b = A[A[i]]%q # retrieve already encoded r by using mod q
A[i] = q*b +r
for i in range(q):
A[i] = A[i]//q # get b since r < q => a = qb + r => a//q = qb//b + r//q => b
return A