leetcode:旋转数组

Leetcode(初级算法):旋转数组

题目

leetcode:旋转数组_第1张图片

思路

这道题确实比较简单,通过观察可以看出:
1、当旋转步数小于数组长度时,旋转结果相当于把数组后k个元素直接放到数组最前面;
2、当旋转步数大于数组长度时,我们可以知道他已经旋转了一周回到原位再旋转多余的步长,即旋转了k%len步(k为旋转步长,len为数组长度)
(第一次提交只考虑了第一种情况,太马虎辽~)
还有值得注意的是题目要求的原地算法
原地算法:当算法执行时,输入的资料通常会被要输出的部份覆盖掉。
详细见词条:https://baike.baidu.com/item/原地算法/8010757?fr=aladdin
所以我理解的是改变的是输入数组本身。

代码(C++)

leetcode:旋转数组_第2张图片
leetcode:旋转数组_第3张图片

其他思路

看到有的博主写的很好,十分值得借鉴,思路大概是:先把数组全部反转,然后再依次反转前k个数据和最后n-k个数据
思路链接:https://www.cnblogs.com/mikemeng/p/8981596.html
感觉真的写的好简洁啊~
leetcode:旋转数组_第4张图片

你可能感兴趣的:(算法题)