LeetCode 189 轮转数组

LeetCode 189 轮转数组

🟠 中等偏上 https://leetcode.cn/problems/rotate-array/description/

环式更新

每次拿起一个数,递归式更新数组。

这个过程可能两次就结束了,例如 [-1,-100,3,99]

class Solution {

public:

    void rotate(vector<int>& nums, int k) {

        int n = nums.size();

  

        int i = 0;

        int count = 0;

        while (count < n - 1) {

            int index = i;

            int i_num = nums[i];

            nums[i] = -1;

            //递归式while 递归函数输入是上面 index 和i_num,nums[i] = -1 设置初始状态。

            //递归函数 每次将 index处的数值 i_num 放置到下一个位置,并递归式调用下一次(这里是循环即在最后更新递归函数输入)

            while (true) {

                int next_index = (index + k)%n;

                int next_num = nums[next_index];

                if (nums[next_index] == -1) {

                    nums[next_index] = i_num;

                    count++;

                    break;

                } else {

                    nums[next_index] = i_num;

                    count++;

                    //更新递归函数输入

                    index = next_index;

                    i_num = next_num;

                }

            }

            i++;

        }

    }

};

巧妙反转

https://leetcode.cn/problems/rotate-array/solutions/551039/xuan-zhuan-shu-zu-by-leetcode-solution-nipk/