leetcode 189. 旋转数组三次反转

tech2026-04-04  2

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2:

输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 解释:  向右旋转 1 步: [99,-1,-100,3] 向右旋转 2 步: [3,99,-1,-100]

 

class Solution {

public:

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

        reverse(nums.begin(), nums.end() - k % nums.size());

        reverse(nums.end() - k % nums.size(), nums.end());

        reverse(nums.begin(), nums.end());

    }

};

 

有趣的方法

public class Solution {     public void rotate(int[] nums, int k) {         k = k % nums.length;         int count = 0;         for (int start = 0; count < nums.length; start++) {             int current = start;             int prev = nums[start];             do {                 int next = (current + k) % nums.length;                 int temp = nums[next];                 nums[next] = prev;                 prev = temp;                 current = next;                 count++;             } while (start != current);         }     } }

 

最新回复(0)