本文基于各个大佬的文章
上点关注下点赞,明天一定更灿烂!

前言
Python基础好像会了又好像没会,所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考,写给自己看的,也欢迎大家在评论区指导~
您的每一条评论都会让我更有学习的动力。
一、分析题目

题目在理解上倒是很通俗易懂。
进阶:(原题带的)
- 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
- 你可以使用空间复杂度为
O(1)
的 原地算法解决这个问题吗?
二、思路以及代码
既然要我们用尽可能多的方法解答,那么先打暴力吧,嘻嘻
python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k = k % n # 处理k大于n的情况
if k == 0:
return
# 创建新数组
rotated = [0] * n
for i in range(n):
# 计算每个元素的新位置
new_pos = (i + k) % n
rotated[new_pos] = nums[i]
# 复制回原数组
for i in range(n):
nums[i] = rotated[i]
上传一下试试。谁懂啊,打暴力选手迎来了春天。

换个思路解答,怎么直接在原数组上操作,也就是不需要借助rotated数组复制呢。
其实右移k个元素相当于把后k个元素移动到最前面,原来的数组再拼接到最后。想要达到类似于滑动这种的想法目前对我来说还是有难度的。不过换一个思路,可以多次反转数组,首先反转整个数,然后反转前k个数,最后反转剩余的数。
python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n=len(nums)
k=k%n
#反转数组从start到end的元素
def reverse(arr,start,end):
while start<end:
arr[start],arr[end]=arr[end],arr[start]
start+=1
end-=1
if k==0:
return
else:
# 第一次反转:反转整个数组
reverse(nums,0,n-1)
# 第二次反转:反转前k个元素
reverse(nums,0,k-1)
# 第三次反转:反转剩余元素
reverse(nums,k,n-1)
上传一下,通过了通过了。

暂时没想出来其他解法,看看题解吧。好吧官方题解也是反转法,ok那这个题完结撒花!今天没鸽,有进步,奖励自己个炸鸡吃吃。
三、本题收获
炸鸡
总结
只会打暴力,基础一团糟,明天再学吧老铁,别真学会了。