解題說明
Concatenation of Array
題目描述:
給定一個長度為 n 的整數陣列 nums,建立一個長度為 2n 的陣列 ans,其中 ans[i] = nums[i] 且 ans[i + n] = nums[i](即把 nums 接在自己後面)。
解題思路:
直接建立新陣列,前半部分複製 nums,後半部分再複製一次 nums。或者用 STL 的 insert 一次完成。
C++ 解法
複雜度分析
時間複雜度:O(n) — 遍歷原陣列一次,每個元素做常數操作。
空間複雜度:O(n) — 結果陣列長度為 2n(不計入輸出空間則為 O(1))。
虛擬碼
1. Create array ans of size 2n 2. For each index i from 0 to n-1: a. ans[i] = nums[i] b. ans[i + n] = nums[i] 3. Return ans
其他解法
使用 STL insert O(n):vector<int> ans(nums); ans.insert(ans.end(), nums.begin(), nums.end()); 一行完成。底層仍是 O(n) 複製但更簡潔。
使用取模 O(n):建立長度 2n 的陣列,ans[i] = nums[i % n]。適用於需要循環存取的場景。
延伸思考
- 如果需要將陣列重複 k 次(而非 2 次),如何高效實現?
- 此技巧在哪些演算法中常用?(提示:循環字串匹配、滑動窗口)
- 如果 nums 非常大,能否用惰性求值(lazy evaluation)避免實際複製?