python每日一题——15轮转数组

题目

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

示例 1:
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

示例 2:
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

答案

解题思路:

这个问题可以通过使用 Python 的切片和列表反转来解决。首先,我们需要将数组向右旋转 k 个位置,然后再将整个数组反转。这样就可以得到旋转后的数组。

Python 代码实现如下:

def rotate(nums, k):
    # 先将整个数组反转
    nums.reverse()
    
    # 将 k 取模,防止 k 大于数组长度
    k = k % len(nums)
    
    # 反转前 k 个元素,然后再反转后几个元素,这样整个数组就旋转了 k 个位置
    nums[:k], nums[k:] = nums[len(nums)-k:], nums[:len(nums)-k]
    
    return nums

代码注释:

  1. reverse() 是 Python 列表的一个方法,用于反转列表中的元素。
  2. 使用 k % len(nums) 是为了防止 k 的值大于数组的长度。在 Python 中,如果一个正数 a 大于一个负数 b,那么 a % b 的结果将是一个正数。因此,如果我们希望 k 的值始终为非负数,那么在 k 大于数组长度的情况下,我们应该将其取模。
  3. nums[:k]nums[len(nums)-k:] 是 Python 列表的切片操作。这表示分别取数组的前 k 个元素和最后 k 个元素。
  4. nums[:len(nums)-k]nums[len(nums)-k:] 是交换两个切片操作的结果,这样就可以实现数组的旋转。原本在前面的 k 个元素被移动到了后面,原本在后面的元素被移动到了前面。
  5. 最后返回旋转后的数组。

你可能感兴趣的:(算法练习,python,算法,数据结构,leetcode)