Easy草稿★★★★★O(n) 時間 · O(n) 空間
Array
尚未複習過

解法已隱藏 — 先讀題目敘述、自己想想看,再點上方按鈕揭曉。

1929Concatenation of ArrayArrays & HashingEasyArrays & Hashing

給定長度為 n 的整數陣列 nums,建立一個長度為 2n 的陣列 ans,使得 ans[i] == nums[i]ans[i + n] == nums[i](0-indexed)。也就是將 nums 串接自己。

Example:

Input: nums = [1,2,1] Output: [1,2,1,1,2,1]

Intuition

TIP

核心思路:將陣列複製一份接在後面即可。可以直接建立新陣列,也可以用 Kotlin 內建函式簡潔完成。

Approaches

1. Direct Copy — O(n) / O(n)
  • Idea: 建立長度為 2n 的陣列,用兩次迴圈或取模填值
  • Time: O(n) - 遍歷一次
  • Space: O(n) - 輸出陣列(不計入則 O(1))
class Solution {
    fun getConcatenation(nums: IntArray): IntArray {
        val n = nums.size
        val ans = IntArray(2 * n)
        for (i in 0 until 2 * n) {
            ans[i] = nums[i % n]
        }
        return ans
    }
}
⭐ 2. Kotlin Built-in Functions — O(n) / O(n)
  • Idea: 使用 + 運算子直接串接兩個陣列
  • Time: O(n) - 內部仍需複製
  • Space: O(n) - 輸出陣列
class Solution {
    fun getConcatenation(nums: IntArray): IntArray {
        return nums + nums
    }
}
Note: System.arraycopy

使用 Java 原生方法進行陣列複製,效能上可能略優。

class Solution {
    fun getConcatenation(nums: IntArray): IntArray {
        val n = nums.size
        val ans = IntArray(2 * n)
        System.arraycopy(nums, 0, ans, 0, n)
        System.arraycopy(nums, 0, ans, n, n)
        return ans
    }
}

🔑 Takeaways