返回

LeetCode每日一题:旋转数组,巧用数学公式,轻松解决!

见解分享

旋转数组是LeetCode上的一道经典算法题,旨在考验程序员对数组操作和数学公式的掌握。在本文中,我们将深入探讨旋转数组问题,并介绍一种巧妙的数学公式,帮助您轻松解决该问题。

问题

给定一个整数数组 nums 和一个正整数 k,将 nums 数组向右旋转 k 个位置。这意味着将数组的最后 k 个元素移动到数组的开头,其余元素依次向后移动 k 个位置。

例如:

给定 nums = [1, 2, 3, 4, 5, 6, 7] 和 k = 3,将 nums 旋转 3 个位置后得到 [5, 6, 7, 1, 2, 3, 4]。

数学公式巧解:

为了解决旋转数组问题,我们可以使用一个巧妙的数学公式。该公式如下:

new_index = (index + k) % nums.length

在这个公式中:

  • new_index 是旋转后的元素在新数组中的索引。
  • index 是元素在旋转前的索引。
  • k 是旋转的次数。
  • nums.length 是数组的长度。

利用这个公式,我们可以轻松地计算出每个元素在旋转后的新索引,从而实现数组的旋转。

实现代码:

def rotate(nums, k):
  """
  Rotates the given array nums to the right by k positions.

  Args:
    nums: The array to be rotated.
    k: The number of positions to rotate the array by.

  Returns:
    None
  """

  # Calculate the new index for each element.
  for i in range(len(nums)):
    new_index = (i + k) % len(nums)

    # Swap the element at the current index with the element at the new index.
    nums[i], nums[new_index] = nums[new_index], nums[i]


# Example usage.
nums = [1, 2, 3, 4, 5, 6, 7]
k = 3
rotate(nums, k)
print(nums)  # Output: [5, 6, 7, 1, 2, 3, 4]

复杂度分析:

  • 时间复杂度:O(n),其中 n 是数组的长度。
  • 空间复杂度:O(1),因为我们没有使用额外的空间来存储中间结果。

结论:

旋转数组是LeetCode上的一道经典算法题,可以使用巧妙的数学公式轻松解决。该公式可以帮助我们计算出每个元素在旋转后的新索引,从而实现数组的旋转。希望本文对您有所帮助!