大明子又称小码哥

大明子又称小码哥

题目描述

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例 1:

示例 2:

提示

力扣热门100题之轮转数组【中等】-LMLPHP

解法1 扩展数组+pop

var rotate = function(nums, k) {
    let n=nums.length;
    k=k%n;
    for(let i=n-1;i>=0;i--){
        nums[i+k]=nums[i];
    }
    for(i=k-1;i>=0;i--){
        nums[i]=nums[n+i];
        nums.pop()
    }
};

执行结果:
力扣热门100题之轮转数组【中等】-LMLPHP

解法2 借助辅助数组

var rotate = function(nums, k) {
    const n = nums.length;
    const newArr = new Array(n);
    for (let i = 0; i < n; ++i) {
        newArr[(i + k) % n] = nums[i];
    }
    for (let i = 0; i < n; ++i) {
        nums[i] = newArr[i];
    }
};

执行结果:
力扣热门100题之轮转数组【中等】-LMLPHP

解法3 unshift+pop

var rotate = function(nums, k) {
    for(let i=0;i<k;i++){
        nums.unshift(nums.pop())
    }
    return nums;

};

执行结果:
力扣热门100题之轮转数组【中等】-LMLPHP

解法4 数组反转

const reverse = (nums, start, end) => {
    while (start < end) {
        const temp = nums[start];
        nums[start] = nums[end];
        nums[end] = temp;
        start += 1;
        end -= 1;
    }
}

var rotate = function(nums, k) {
    k %= nums.length;
    reverse(nums, 0, nums.length - 1);
    reverse(nums, 0, k - 1);
    reverse(nums, k, nums.length - 1);
};

执行结果:

力扣热门100题之轮转数组【中等】-LMLPHP

07-27 07:15