不正经IT从业者

旋转数组

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))
};
上一篇 下一篇

猜你喜欢

热点阅读