努力扣门方能成就伟业
力扣
189. 旋转数组
附:
思路:
本题有多种解法,我采用的是比较优化的解法,时间复杂度是O(N),空间复杂度是O(1)。
首先对数组前numsSize-k个元素逆置,然后再对数组后k个元素逆置,最后再整个数组元素一起逆置,这样就能非常完美的做出答案了。
因为要进行多次逆置,所以为了方便,我专门写了一个算法是用来逆置的,这个函数我们需要传入的参数是数组,数组最左边的位置和最右边的位置,然后引用while循环在这之中通过一个临时变量来进行逆置即交换,每执行一次循环,数组元素最左边的向右移动一次,数组元素最右边的向左移动一次,当他们相遇(相等)时,逆置结束。
关于通过引用临时变量来交换两个数的原理:eg:假设有一瓶果汁和一瓶啤酒如何交换他们呢?让啤酒放人果汁的瓶子和果汁放入啤酒的瓶子。很简单,只需要在拿个空瓶子即可实现这个功能,先将果汁倒入空瓶子,将啤酒倒入原先装有果汁的瓶子,再将果汁倒入原先装有啤酒的瓶子即可实现交换。
代码实现如下:
备注:
楼主不才,不喜勿喷,若有错误或需要改进的地方,非常感谢你的指出,我会积极学习采纳。谢谢家人们一直以来的支持和鼓励,我会继续努力再接再励创作出更多优质的文章来回报家人们的。编程爱好的xdm,若有编程学习方面的问题可以私信我一同探讨(我尽力帮),毕竟“众人拾柴火焰高”,大家一起交流学习,共同进步!
2021年10月14日