美文网首页
189.Rotate Array

189.Rotate Array

作者: 0x2333 | 来源:发表于2018-12-01 11:09 被阅读0次

189. Rotate Array

总结: 让数组右移K位

**解法: **

1.循环替换

描述: 从第一个元素开始,将该元素放置到变换后的位置上,原位置上的元素存入临时变量prev,再计算该元素变换后的位置,将prev赋给变换后的位置,而原来的元素以此类推。最终会跳转到第一个元素上。再对第二个元素继续跳转。设置一个计数器count,每放置一个变换后的元素就+1,当count==len(nums) 说明所有元素放置成功。

例子

k=k%len(nums)
start=0
count=0 #记录变换次数 等于len时停止
while(count < len(nums)):
    current=start #当前没跳转前的位置
    prev=nums[current]  #当前没跳转前的值
    while(True):
        new_index=(current+k) % len(nums)  #跳转后的位置
        prev,nums[new_index]=nums[new_index],prev 
        current=new_index #以新的位置为下一次跳转的起点
        count+=1
        if(current==start): #当跳转会到start起始点 再对下一个位置的元素进行跳转
            break
    start+=1

2.反转法

描述:右移 K 次,就有k个元素从后面跑到前面来。可以先将数组整体反转 再反转前K个元素 再反转后len-k 个元素,就可以得到最后的结果。

例子

 k=k%len(nums)
 reverse(nums,0,len(nums)-1)
 reverse(nums,0,k-1)
 reverse(nums,k,len(nums)-1)
'''反转算法 ,start end 都是索引,两个指针分别从两端向中间移动。如果是奇数 最中间的元素不会被调换'''
 def reverse(nums,start,end):
     while(start < end):
         nums[start],nums[end] = nums[end],nums[start]
         start+=1
         end-=1

相关文章

网友评论

      本文标题:189.Rotate Array

      本文链接:https://www.haomeiwen.com/subject/uxketqtx.html