1.5 面试经典150题 - 轮转数组

轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

注意:本题需要原地操作

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.
        """
        if not nums: return
        count = len(nums)
        k = k % count
        nums[:] = nums[::-1]
        nums[:k] = nums[:k][::-1]
        nums[k:] = nums[k:][::-1]

本题解题思路是:

以[]1, 2, 3, 4, 5, 6, 7] 3 为例

1. 先整体轮转,将 [1, 2, 3, 4, 5, 6, 7]转为 [7, 6, 5, 4, 3, 2, 1]

2. 再局部分别轮转前k个和剩余的,[5, 6, 7,   1, 2, 3, 4],即为答案

这里要注意,列表的操作:

nums = nums[::-1]

nums = nums[-k:] + nums[:-k]

以及

nums.extend(nums); nums = nums[length - k:-k]

这些写法,nums地址都变了,所以不是原地修改

你可能感兴趣的:(随便写写,python)