欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

旋转数组

程序员文章站 2024-03-23 18:33:10
...

将包含 n 个元素的数组向右旋转 步。

例如,如果  n = 7 ,  k = 3,给定数组  [1,2,3,4,5,6,7]  ,向右旋转后的结果为 [5,6,7,1,2,3,4]

注意:

尽可能找到更多的解决方案,这里最少有三种不同的方法解决这个问题。

提示:

要求空间复杂度为 O(1)

观察旋转前后的数组,发现就是前n-k个数和后k个数换位置,因为要求空间复杂度为O(1),所以可以通过将前n-k个数组前后反转,再将后k个数组前后反转,最后将整个数组前后反转得到旋转后的数组。

开始版本:

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

提交后发现一个大佬的版本速度更快更简洁:

    def rotate(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        k = k % n
        nums[:k],nums[k:] = nums[n-k:],nums[:n-k]
看来还需要继续努力!


相关标签: x