题目如下:
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
第一种方法:
var rotate = function(nums, k) {
var temp;
for (var i = 0; i < k ; i++) {
temp = nums.pop();
nums.unshift(temp);
}
};
这种方法很简单,但是时间复杂度有点高。
第二种方法:
var rotate = function(nums, k) {
var tNums = new Array();
var len = nums.length;
for (var i = 0; i < len; i++) {
tNums[i] = nums[i];
}
for (var j = 0; j < len; j++) {
nums[(j + k)%len] = tNums[j];
}
};
第二种方法时间复杂度低了,但是空间复杂度增大。
第三种方法(参考自点击打开链接):
var rotate = function(nums, k) {
<span style="white-space:pre"> </span>var len = nums.length;
var temp = nums[0]; //临时存储交换出来的元素
var startIndex = 0;
var currentIndex = 0;
for (var i = 0; i < len; i++) {
currentIndex = (currentIndex + k) % len;
var swap = nums[currentIndex];
nums[currentIndex] = temp;
temp = swap;
//完成一个环的交换
if (currentIndex == startIndex) {
currentIndex = ++startIndex;
temp = nums[currentIndex];
}
}
};
这种方法的时间和空间复杂度都很低。