【力扣-轮转数组 Java / Python】

发布于:2025-08-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

题目:

在这里插入图片描述
思路:
有两种做法
1、✅ 方法一:额外数组
在复制一份数组,然后在把结果放回去。

class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        k = k % n;  // 防止 k > n
        int[] temp = new int[n];

        for (int i = 0; i < n; i++) {
            temp[(i + k) % n] = nums[i];
        }

        // 再把结果拷贝回原数组
        for (int i = 0; i < n; i++) {
            nums[i] = temp[i];
        }
    }
}

2、✅ 方法二:数组反转(最优解,空间 O(1))

Java版本
1)先翻转整体数组
2)在反转前K个
3)在反转后N - K 个

举例:

原数组 [1,2,3,4,5,6,7], k=3

整体反转 → [7,6,5,4,3,2,1]

反转前 3 个 → [5,6,7,4,3,2,1]

反转后 4 个 → [5,6,7,1,2,3,4] ✅

class Solution {
    public void rotate(int[] nums, int k) {
    // 翻转数组,先全部,在前k 在剩下的
    int n = nums.length;
    k = k % n;
    reverse(nums, 0 , n - 1);
    reverse(nums, 0 , k - 1);
    reverse(nums, k , n - 1);   
    }

    public void reverse(int[] nums, int left, int right) {
        while(left < right) {
            int temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
            left++;
            right--;
        }
    }
}

python版本

class Solution(object):
    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        k = k % n
        self.reverse(nums, 0, n - 1)
        self.reverse(nums, 0, k - 1)
        self.reverse(nums, k, n - 1)


    def reverse(self, nums, left, right):
        while left < right:
            temp = nums[left]
            nums[left] = nums[right]
            nums[right] = temp
            left += 1
            right -= 1   

网站公告

今日签到

点亮在社区的每一天
去签到