旋转数组

null切片的学习

如果对数组进行分段提取,我们可能会用下标的方式,如果提取的量太大,那么可能会比较麻烦,所以Python提供了切片操作符。

1
L = ['Adam', 'Lisa', 'Bart', 'Paul']

我只要前面2个元素,L[0;3]

结果

1
['Adam', 'Lisa', 'Bart']

这里要注意的是这里面的0是指的第一个元素 到第三个元素截至不包含第三个元素(也就是下标为4的元素)切片内的参数不写表示从第一个参数开始,最后一个参数结束

切片方法还可以包含三个参数 开始,结束,每隔多少取一个

第三个参数表示每隔n个元素,取一个。

由于List也可以有第倒数多少元素这种操作,那么,使用倒数下标也可以这样操作。

1
2
3
4
L = ['Adam', 'Lisa', 'Bart', 'Paul']
L[::2]
运行结果
['Adam', 'Bart']

补充一下 数组是可以相加的

1
2
3
L = ['Adam', 'Lisa'] + [ 'Bart', 'Paul']
['Adam', 'Lisa', 'Bart', 'Paul']
L[] = L[:1]+L[1:]

null来解一下这一道题

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

1
2
3
4
5
6
输入: [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]

解题思路

​ 从len(nums)- k 开始 为第一个数组,第二的数组从len(nums)- k 结束

这样就达到交换的目的了

实现代码部分为

1
2
3
4
5
6
class :
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
nums[:] = nums[len(nums)-k:]+nums[:len(nums)-k]