旋转数组
2020-06-11 本文已影响0人
Mark_大东
旋转数组
难道:简单
第一种方法:
暴力解法
时间复杂度:O(n * k)
// k代表着循环次数
// 一次一循环是最后一个与第一个进行位置交换,然后数据相互赋值,然后第一个与第二个相互交换赋值
var rotate = function(nums, k) {
let temp,next
for (let i = 0 ; i < k ; i ++){
next = nums[nums.length - 1]
for (let j = 0 ; j < nums.length ; j ++){
temp = nums[j]
nums[j] = next
next = temp
}
}
};
第二种方法:
使用额外的数组
时间复杂度:O(n)
空间复杂度:O(n)
// arr的长度与nums的长度一致
// 如:nums = [1,2,3,4,5] ; k = 2 ; arr = [4,5,1,2,3]
// 以上我们可以得出:
// arr[2] = nums[0] ;
// arr [(0 + 2) % 5] = nums[0] ;
// arr [(i + k) % nums.length] = nums[i]
var rotate = function(nums, k) {
let arr = []
for (let i = 0 ; i < nums.length ; i ++){
arr [(i + k) % nums.length] = nums[i]
}
for (let i = 0 ; i < nums.length ; i ++){
nums[i] = arr[i]
}
};
第三中方法
var rotate = function(nums, k) {
nums.unshift(...nums.splice(nums.length - k ,nums.length))
};