189.旋转数组
1.题目
- 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数
示例 1:
输入: 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]
示例 2:
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
python
法一、利用python自带的reverse函数
-
思路:先翻转整个数组,再分别翻转前k个和后n-k个。
-
注意特殊情况:k有可能大于数组长度,用k %= n保证k小于n,如下图:

class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n=len(nums)
k %= n #保证k小于n
nums.reverse()
nums[0:k]= reversed(nums[0:k])
nums[k:n]= reversed(nums[k:n])
- 也可用切片实现翻转
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k %= n
nums[:] = nums[::-1]#整个数组翻转
nums[:k] = nums[:k][::-1]#前k个翻转
nums[k:] = nums[k:][::-1] #从k到最后翻转
法二、辅助空间法
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k %= n
tmp = nums[n - k:].copy()#先用一个临时数组存储后K个元素
for i in range(n - k - 1, -1, -1):#原数组元素向后移动k个
nums[i + k] = nums[i]
for i in range(0, k):#把临时数组存的元素放到数组前面
nums[i] = tmp[i]
javascript
reverse
- 思路:先翻转整个数组,再分别翻转前k个和后n-k个。
var rotate = function(nums, k) {
//先反转整个数组,再翻转前k个,再翻转后n-k个
var reverses = function(nums,left,right){
while(left<right){
let t=nums[left]
nums[left]=nums[right]
nums[right]=t
left++
right--
}
}
k=k%nums.length //处理 k 大于数组长度的情况
reverses(nums,0,nums.length-1)
reverses(nums,0,k-1)
reverses(nums,k,nums.length-1)
return nums
};
标签:
力扣-初级算法
, 力扣hot100-js
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了