·题目描述
·解题思路
—————冒泡排序的超时算法——————
1.k=1 就是第一个元素不断向后一个元素调换位子,直到轮转到最后一个位置(类似于冒泡排序,不断向后冒出)
2.调用循环,当k>0的时候,不断向后冒泡,并且每次冒出一个元素后k-1
(上述代码时间复杂度为O(kn),在leetcode提交的时候37/38算例会超时
——————改进————
1.其实向后轮转的时候,有部分元素之间的相对位置是不变的,因此可以使用切片的思想进行轮转
2.使用k将原始数组分为两个部分nums[:n-k] (前部分) 和 nums[n-k:](后部分)
3.前部分的子数组的位置改为 nums[k:] 后部分的子数组位置改为 nums[:k]
`代码
class Solution(object):
def rotate(self,nums,k):
n = len(nums)
if k > n :
k -= n
if k == n :
return nums
else:
nums[k:] ,nums[:k] = nums[:n-k] ,nums[n-k:] #不需要每个元素不断替换冒泡,因为旋转的时候,可以将其分割为两个部分,
#一部分后移,一部分前移就好了
return nums