Leetcode-Array-189.轮转数组
https://leetcode.cn/problems/rotate-array/description/?envType=study-plan-v2&envId=top-interview-150
思路
主要有以下几种思路,因为我曾经在清华邓公数据结构网课中听到过,所以很快直接想到了最佳算法。
每次移动一位,将整个数组移动
次,因为 ,所以可以将时间复杂度近似为 ,空间复杂度为 直接将一个元素移动
位,到对应的位置上,但是注意,我们需要暂存下被挤占位置的元素的值,但是这个被挤占了的并不是下次就能被用到,所以实际上需要的额外空间接近于 ,时间复杂度为 区间逆转,我们能不能在思路2的基础上进行优化,想办法对数组进行处理,使得每次被挤占的元素正好是下次要用到的元素?进一步的,我们能不能预处理之后,让
与 ,直接交换位置就可以?确实存在这样的解法: 首先将
这前半长度为 的区域倒置。 然后将
这后半长度为 的区域进行倒置。 最后将整个数组进行倒置,神奇的发现,这样的结果与轮转
次的结果是一致的。我们用下面这个图来说明:
代码
代码很简单,就不需要伪代码了。
1 | class Solution { |