行业知识
Leetcode 189. 轮转数组
2026-11-15 22:43:31
来源:互联网转载
���定一个整数数组 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]
“modify nums in-place instead”,指的是原位变化
实际上我们的变量都是一个对象,这个对象拥有两个基本属性——value和id,value就是变量里存储的值,id就是变量的实际存储的内存地址,根据这个内存地址我们就可以找到对应的变量数据,这就是关键所在了:原位修改指的是运行完毕后,nums的id地址不变,也就是说,一切会导致nums最后id改变的实现方式都是错误的,因为leetcode编译器会直接去读取原始的内存地址中存储的数据,如果你新建了nums变量,在新的id地址上实现了效果,但是很不幸,没用,因为原来id地址上的内容完全没改变,所以你的结果还是原来的模样,未曾改变半分,所以这也是很多人明明print(nums)看到了数据改变,但是编译器显示nums未曾改变的原因。
python:
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ # 方法一 # for i in range(k): # nums.insert(0,nums.pop()) # 方法二 length=len(nums) k%=length # 原地赋值先将nums全部颠倒 nums[:]=nums[::-1] # 将nums前k个倒转 nums[:k]=nums[:k][::-1] # 将k后面倒转 nums[k:]=nums[k:][::-1]
上一篇:华为泰山服务器怎么打开?
下一篇:揭秘织梦CMS文章标题匹配技巧!