题目描述
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
进阶:
尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?
题解
翻转数组法
翻转数组其实就是头尾指针互换元素,然后头尾指针向中间遍历,如此循环。我们需要旋转数组,其实只需要做三次旋转即可。
执行用时0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:55.3 MB, 在所有 Java 提交中击败了38.26%的用户
通过测试用例:8 / 38
class Solution {
public void rotate(int[] nums, int k) {
if (nums.length <= k) {
k = k % nums.length;
}
reverseOrder(nums, 0, nums.length - 1);
reverseOrder(nums, 0, k - 1);
reverseOrder(nums, k, nums.length - 1);
}
public void reverseOrder(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start += 1;
end -= 1;
}
}
}