题目链接
英文链接: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 { |