美文网首页
189. Rotate Array

189. Rotate Array

作者: April63 | 来源:发表于2018-05-15 16:25 被阅读0次

这一题想到一个只用一个额外空间的办法,但是超时了

class Solution(object):
    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
        for i in range(k,0,-1):
            temp = nums[n-i]
            for j in range(n-i-1, k-i-1, -1):
                nums[j+1] = nums[j]
            nums[k-i] = temp

AC的做法:

class Solution(object):
    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
        temp = []
        for i in range(n-k, n):
            temp.append(nums[i])
        for j in range(n-k-1,-1,-1):
            nums[j+k] = nums[j]
        for i in range(k):
            nums[i] = temp[i]

巧妙的做法,按照K将数组分成两部分,两部分分别reverse,注意这里没办法用函数,需要按照坐标reverse,要注意下标,最后合起来再reverse,这里可以直接用reverse函数,代码如下:

class Solution(object):
    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
        for i in range((n-k)/2): 
            nums[i], nums[n-k-1-i] = nums[n-k-1-i], nums[i]
        for j in range(n-k,n - k + k/ 2):
            nums[j], nums[2*n-k-1-j] = nums[2*n-k-1-j], nums[j]
        nums.reverse()

相关文章

网友评论

      本文标题:189. Rotate Array

      本文链接:https://www.haomeiwen.com/subject/pxhydftx.html