轮转数组

使用js、python

Posted by Shallow Dreamer on April 21, 2023

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

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/rotate-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例:

输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释: 
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

解法一

思路: 循环将最后k位元素弹出并插入到数组前面,时间复杂度为O(n)

代码:

function rotate(nums){
	var k = k % nums.length
    if(k != 0){
        for(i = 0;i < k;i++){
        	nums.unshift(nums.pop())
    	}
    }
    return nums
}

解法二

思路: 由于是重复弹出最后一位元素添加到数组前,所以可以使用递归

代码:

nums = [1,2,3,4,5,6]
function rotate(k, nums) {
    k = k % nums.length
    if(k > 0){
        nums.unshift(nums.pop())
        rotate(k - 1,nums)
    }
    return nums
}
nums = [1, 2, 3, 4, 5, 6]
console.log(rotate(3, nums))

解法三

思路: 数组从-k处断开调换位置拼接

代码:

javascript


python

def rotate(nums,k):
	nums[:-k],nums[-k:] = nums[-k:],nums[:-k]