Rotate Array 续

前面提交的主要出现两个问题:

1:题目意思没弄对,在函数里面print是不对的,原意是通过函数调用修改穿进去的列表参数

2:由于传进去的列表是可变数据类型,因此要想修改传进去的参数列表,不能重新创建一个列表对象,而应该对列表元素进行修改,显然下面之前的方法是错误的

class Solution:
    # @param nums, a list of integer
    # @param k, num of steps
    # @return nothing, please modify the nums list in-place.
    def rotate(self, nums, k):
        length = len(nums)
        k = k % length
        if k > 0 and length > 1:
            nums = nums[(length - k):] + nums[:(length - k)]

由于前面两个for循环虽然能达到目的,但是runtime性能太差,因此还是在切片基础上对列表元素进行修改,既然两个切片合成的列表实际上就是nums的结果,但是不能重新创建一个列表对象被变量num指向了,因此可以定义一个中间列表array来指向切片之和这个对象,然后遍历切片之和这个列表,元素按顺序一一赋给nums对应的元素即可,这样就一层for循环,时间复杂度o(n)

class Solution: # @param nums, a list of integer # @param k, num of steps # @return nothing, please modify the nums list in-place. def rotate(self, nums, k): length = len(nums) k = k % length if k > 0 and length > 1: array = nums[(length - k):] + nums[:(length - k)] for x in range(length): nums[x] = array[x]

再次提交,终于成功被接受了~!!!

33 / 33 test cases passed.              Status: Accepted
Runtime: 91 ms                          Submitted: 14 minutes ago

发表回复