题目
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
- 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
- 要求使用空间复杂度为 O(1) 的原地算法。
思路
每次向右移动一位,移动k次
scala
to:是一个闭区间
until:是一个左闭右开区间
reverse:反转
object Solution {
def rotate(nums: Array[Int], k: Int): Unit = {
val n = nums.length
val newk = k % n
if (k == 0) {
println(nums)
} else {
for (i <- 1 to newk) {
var temp = nums(n - 1)
for(j <- (0 to n-2).reverse){
nums(j+1) = nums(j)
}
nums(0) = temp
}
}
}
}
java
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k = k % n;
if (k == 0) {
System.out.println(nums);
} else {
for (int i = 0; i < k; i++) {
int temp = nums[n-1];
for(int j = n-2; j >= 0; j--){
nums[j+1] = nums[j];
}
nums[0] = temp;
}
}
}
}
大神的代码
class Solution {
public void rotate(int[] nums, int k) {
k = k % nums.length;
int[] tmp = nums.clone();
System.arraycopy(tmp, tmp.length - k, nums, 0, k);
System.arraycopy(tmp, 0, nums, k, tmp.length - k);
}
}