题解 | #旋转数组#

旋转数组

http://www.nowcoder.com/practice/e19927a8fd5d477794dac67096862042

Python的两种解法:

翻转三次

  1. [6, 5, 4, 3, 2, 1] # 翻转全部

  2. [5, 6, 4, 3, 2, 1] # 再翻转 【0,m-1】

  3. [5, 6, 1, 2, 3, 4] # 再翻转 【m,n-1】

class Solution:
    def solve(self , n: int, m: int, a: List[int]) -> List[int]:
        # write code here
        m = m % n
        # 翻转全部
        self.reverse(a, 0, n-1)
        # 再翻转 【0,m-1】
        self.reverse(a, 0, m-1)   
        # 再翻转 【m,n-1】
        self.reverse(a, m, n-1)   
        return a
    
    def reverse(self, nums, left, right):
        while left <= right:
            nums[left], nums[right] = nums[right], nums[left]
            left += 1
            right -= 1

语法糖解法:

class Solution:
    def solve(self , n: int, m: int, a: List[int]) -> List[int]:
        # write code here
        m = m % n
        return a[-m:] + a[:-m]
全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务