给你一个数组,将数组中的元素向右轮转 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]