/*
 * 演算法 / Algorithm: 同 C 版本，三次反轉 / same triple-reverse trick.
 * 直接呼叫 STL 的 std::reverse，省得自己手寫雙指針。
 * Uses std::reverse from <algorithm> to avoid writing the swap loop manually.
 * Time O(n), Space O(1).
 */

#include <vector>      // std::vector：動態陣列容器 / dynamic array container
#include <algorithm>   // std::reverse：標準反轉函式 / standard reverse algorithm

class Solution {
public:
    // LeetCode 簽名：傳入引用 (&) 直接修改原陣列 / pass by reference to mutate caller's vector
    void rotate(std::vector<int>& nums, int k) {
        int n = nums.size();              // .size() 回傳元素個數 / number of elements
        if (n <= 1) return;               // 長度 0 或 1 不需處理 / nothing to do
        k %= n;                           // 等同 k = k % n，避免多餘整圈 / normalize k
        if (k == 0) return;               // 等同沒動 / no rotation needed

        // std::reverse(begin, end) 反轉左閉右開區間 [begin, end)
        // std::reverse takes a half-open iterator range [begin, end)
        std::reverse(nums.begin(), nums.end());            // 步驟 1：整段反轉 / reverse all
        std::reverse(nums.begin(), nums.begin() + k);      // 步驟 2：反轉前 k 個 / reverse first k
        std::reverse(nums.begin() + k, nums.end());        // 步驟 3：反轉剩下的 / reverse the rest
    }
};
