--- ###### tags: `Leetcode` --- # Leetcode 1920. Build Array from Permutation [link](https://leetcode.com/problems/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. --- 題意: 給定一個陣列,建立一個相同長度的陣列ans,其中ans[i] = nums[nums[i]] --- Iterate the array. For each item i, append nums[nums[i]] to the new array. #### Solution 1 ```python= class Solution: def buildArray(self, nums: List[int]) -> List[int]: lst = [0] * len(nums) for i in range(len(nums)): lst[i] = nums[nums[i]] return lst ``` O(T): O(n) O(S): O(n) --- Let’s assume an element is a and another element is b, both the elements are less than n. So if an element a is incremented by b*n, the element becomes a + b*n. So, when a + b*n is divided by n, the value is b and a + b*n % n is a. #### Solution 2 ```python= class Solution: def buildArray(self, nums: List[int]) -> List[int]: n = len(nums) for i, num in enumerate(nums): nums[i] += n * (nums[num] % n) for i in range(n): nums[i] //= n return nums ``` O(T): O(n) O(S): O(1) reference: https://dev.to/vishnureddys/build-array-from-permutation-solution-to-leetcode-problem-357l