weekly contest 427。

題目

輸入整數陣列 nums,代表一個循環陣列。
你必須建立一個相同大小的新陣列 result,並滿足以下條件。

對於每個索引 i 執行以下操作:

  • 若 nums[i] > 0:從 i 向右走 nums[i] 步,並將抵達位置對應的值寫入 result[i]。
  • 若 nums[i] < 0:從 i 向左走 nums[i] 步,並將抵達位置對應的值寫入 result[i]。
  • 若 nums[i] == 0:將 nums[i] 寫入 result[i]。

回傳新陣列 result。

注意:nums 是循環的,如果從最後一個位置向右移動會回到陣列開頭;反之亦然。

解法

沒什麼好說的,索引直接加上 nums[i] 後對 N 取餘數即可。

時間複雜度 O(N)。
空間複雜度 O(N)。

class Solution:
    def constructTransformedArray(self, nums: List[int]) -> List[int]:
        N = len(nums)
        ans = [0] * N
        for i, x in enumerate(nums):
            t = (i+x) % N
            ans[i] = nums[t]

        return ans