题目链接
英文链接:https://leetcode.com/problems/rotate-array/
中文链接:https://leetcode-cn.com/problems/rotate-array/
题目详述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
1 | 输入: [1,2,3,4,5,6,7] 和 k = 3 |
示例 2:
1 | 输入: [-1,-100,3,99] 和 k = 2 |
说明:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的 原地 算法。
题目详解
- 向右循环移动 k 位,等价于以下三个步骤:
- 先翻转整个数组,即
[0, n - 1]。 - 再翻转前 k 个数,即
[0, k - 1]。 - 再翻转剩余的部分,即
[k, n - 1]。
- 先翻转整个数组,即
- 以
n = 7, k = 3为例,图示如下:- 输入为
nums = ---->--->, 所求输出为--->---->。 - 首先翻转
---->--->,得到<---<----。 - 再翻转
<---,得到--->。 - 再翻转
<----,得到---->。
- 输入为
1 | public class LeetCode_00189 { |