技術文章
技術問答
My Project
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
文章
問答
Tag
邦友
鐵人賽
搜尋
2025 iThome 鐵人賽
DAY
18
0
自我挑戰組
從零開始學習LeetCode
系列 第
18
篇
Day 18 Rotate Array
17th鐵人賽
pinggg
2025-10-02 22:15:29
189 瀏覽
分享至
題目:給定一個長度為 n 的整數陣列 nums,以及一個整數 k,請將陣列「向右旋轉」k 步
解法一
直觀,但效率差
適合「第一次接觸」的同學練習
註解
nums.pop() → 移除並回傳陣列最後一個元素
nums.insert(0, last) → 插到陣列的最前面
重複 k 次後,陣列就被旋轉
理解
想像你有一列人排隊:
[1,2,3,4,5,6,7]
旋轉一次,就是把最後一個人(7)拉到最前面:
[7,1,2,3,4,5,6]
旋轉三次,就依序拉出 7、6、5 到最前面
這樣就得到結果 [5,6,7,1,2,3,4]
缺點是效率不好,因為每次 insert 都要移動其他元素
解法二
額外陣列
速度快,但需要 O(n) 額外空間
註解
(i + k) % n → 計算新位置,保證不會超出邊界
建立新陣列 newArr 來存放旋轉後的結果
最後再把結果覆蓋回原本 nums
理解
就像你要搬家:
每個人(數字)都有一個新位置(用公式算出來)
搬到新房子(newArr)後,再全部搬回舊房子(nums)
解法三
不需要額外空間,效率高
註解
reverse(start, end) → 自己寫一個函式,交換陣列前後元素
整體操作順序:
(1)[1,2,3,4,5,6,7] → [7,6,5,4,3,2,1]
(2)前 k=3 個反轉 → [5,6,7,4,3,2,1]
(3)後面反轉 → [5,6,7,1,2,3,4]
理解
就像把一張紙上的數字「翻轉」幾次:
(1)先把整張紙上下顛倒
(2)把前 k 個翻回來
(3)把後面翻回來
最後就得到「旋轉」的效果
留言
追蹤
檢舉
上一篇
Day 17 Move Zeroes
下一篇
Day 19 Move Zeroes II – Partition Array by Parity
系列文
從零開始學習LeetCode
共
30
篇
目錄
RSS系列文
訂閱系列文
0
人訂閱
26
Day 26 Valid Parentheses
27
Day 27 Longest Common Prefix
28
Day 28 Valid Palindrome
29
Day29 First Unique Character in a String
30
Day30 總結
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
268
組
團體組數
10
組
累計文章數
2474
篇
最後報名日
9/15
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
18th鐵人賽
windows
php
c#
linux
windows server
css
熱門問題
新人IT可以做甚麼
鼎新Workflow ERP AiGP 用筆電開啟速度超慢,有妙方嗎?
儲存裝置加密:如何使用VeraCrypt加密整個UFD,而非加密唯一的分割區?
企業GCP Antigravity可否使用Claude model?
outlook 報表的應用
熱門回答
新人IT可以做甚麼
熱門文章
Day 2|DGX Spark GB10 深度解析:128GB 統一記憶體到底解決了什麼問題
Day 3|網路與儲存規劃:10GbE 骨幹、雙 Spark 直連與 NFS 集中模型庫
Day 1 | AI Infra 到底是什麼?
Day 4|開箱之後 : DGX OS 初始環境建置與 CUDA、Docker 生態確認
關於工程師被主管同事下屬貼上負面標籤的邏輯解套
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}