LC189. 轮转数组
题目描述
这是 LeetCode 上的(189. 轮转数组) ,难度为 中等。
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105
进阶:
- 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
- 你可以使用空间复杂度为
O(1)
的 原地 算法解决这个问题吗?
题解
翻转数组
本题用翻转数组的解法,1 2 3 4 5 6 7
,翻转过后就会变成 7 6 5 4 3 2 1
,这样后面的数字就会轮转到前面。
这时候在第k
位(k = 3
)分开即 7 6 5
| 4 3 2 1
,将两个子数组进行翻转即5 6 7
| 1 2 3 4
。
代码
1 |
|
复杂度
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$
最后
我的第一想法是用击鼓传花的方式,每次指针跨越k
步即nums[j+k] = nums[j]
这种方式,但是在数组长度为偶数,轮转次数k
也为偶数时,会出现奇数位置没有动的问题,记录在此,留念。
1 |
|
LC189. 轮转数组
https://blog.daynoti.com/posts/48002/