015.轮转数组
189. 轮转数组
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105
进阶:
- 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
题目思路
该方法基于如下的事实:当我们将数组的元素向右移动 k 次后,尾部 k % n 个元素会移动至数组头部,其余元素向后移动 k%n 个位置。
该方法为数组的翻转:我们可以先将所有元素翻转,这样尾部的 k%n 个元素就被移至数组头部,然后我们再翻转[0,k%n−1]区间的元素和[k%n,n−1]区间的元素即能得到最后的答案。
我们以 n=7,k=3 为例进行如下展示:
操作 | 结果 |
---|---|
原始数组 | 1 2 3 4 5 6 7 |
翻转所有元素 | 7 6 5 4 3 2 1 |
翻转[0,(k%n)−1]区间的元素 | 5 6 7 4 3 2 1 |
翻转[k%n,n−1]区间的元素 | 5 6 7 1 2 3 4 |
图解
题解代码:
1 |
|
015.轮转数组
http://example.com/2025/02/18/015-轮转数组/