Leetcode189.旋转数组
题目难度:中等
题目
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
思路:
- 看到旋转数组,向右移动k个位置,那移出去的元素怎么存储呢?对,存到前面腾出来的位置,就像时钟
- 日常13点表示1点钟,怎么得到是时钟上的1点呢,对,取模运算
- 13%12=1
- 同理 k值如果与n取模运算,k的位置元素旋转的分割点了
方法一,反转法三次反转
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k %= n;
reverse(nums