gpt4 book ai didi

algorithm - 如何改进我的 "rotate (roll/cyclic permutation) array"解决方案?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:36 24 4
gpt4 key购买 nike

我在 leetcode 上做了一些事情,并提出了解决方案,它工作正常,但在某些情况下。这是问题本身:

enter image description here

但在这种情况下它不会:

enter image description here

如果 k 大于数组长度,我如何旋转元素是没有意义的。如果您对如何改进此解决方案有任何想法,我将不胜感激

class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
if len(nums) > k:
self.swap(nums, 0, len(nums)-1)
self.swap(nums, 0,k-1)
self.swap(nums, k, len(nums)-1)


def swap(self, nums, start, end):

while start < end:
nums[start], nums[end] = nums[end], nums[start]
start+=1
end-=1

最佳答案

为了理解为什么这对 k 大于数组长度的情况不起作用,让我尝试解释按 的此类值旋转背后的一些逻辑k.

模运算符 % 会很有用。例如,如果一个数组的长度为 5,而你想旋转 5,你最终会得到相同的数组。所以从技术上讲,您最好希望旋转 0。这就是 % 运算符发挥作用的地方。 5 % 5 = 0。如果我们想将一个长度为 5 的数组旋转 7 个点,我们最终会得到与将数组旋转 2 个相同的结果,结果是 7 % 5 = 2。你知道我要用这个做什么吗?

如果 k 的值小于数组的长度,这也适用。假设我们要将数组长度 5 乘以 3 进行旋转,我们执行 3 % 5 = 3

所以对于任意的旋转量k和数组长度L,优化旋转量n等价于n = k % L.

您应该在旋转方法的开头修改代码以调整旋转量:

k = k % L

并使用此值旋转正确的数量。

关于algorithm - 如何改进我的 "rotate (roll/cyclic permutation) array"解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57085627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com