每次旋轉一步,重複k次。可行,但是速度太慢了。
class
solution
:def
rotate
(self, nums: list[
int]
, k:
int)
->
none
:"""
do not return anything, modify nums in-place instead.
"""length =
len(nums)
for i in
range
(k):
a = nums[-1
]for j in
range
(length-1)
: nums[
-j-1
]= nums[
-j-2
] nums[0]
= a
環狀結構,遍歷所有元素一遍
class
solution
:def
rotate
(self, nums: list[
int]
, k:
int)
->
none
:"""
do not return anything, modify nums in-place instead.
"""length =
len(nums)
k = k % length
count =
0#用於記錄移動次數
start =
0while count < length:
#所有元素都移動一次結束
current = start
prev = nums[current]
while
true
: later =
(current + k)
% length
tem = nums[later]
nums[later]
= prev
prev = tem
current = later
count +=
1if start == current:
break
start +=
1
反轉
class
solution
:def
rotate
(self, nums: list[
int]
, k:
int)
->
none
:"""
do not return anything, modify nums in-place instead.
"""length =
len(nums)
k = k % length
nums.reverse(
) nums[
:k]=
[i for i in
reversed
(nums[
:k])
] nums[k:]=
[i for i in
reversed
(nums[k:])
]
這裡有乙個問題,不知道為什麼這樣寫在lc裡不對,但是外面跑,print()是對的?
nums =
list
(reversed
(nums)
)nums[
:k]=
list
(reversed
(nums[
:k])
)nums[k:]=
list
(reversed
(nums[k:])
)print
(nums)
LC 旋轉陣列
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。高階 盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。你可以使用空間複雜度為 o 1 的 原地 演算法解決這個問題嗎?示例 1 輸入 nums 1,2,3,4,5,6,7 k 3 輸出 5,6,7,1,2,3,4 ...
前端練習51 旋轉陣列
題目來自leetcode 給定乙個陣列,將陣列中的元素向右移動k個位置,其中k是非負數。示例 1 輸入 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...
練習題30 旋轉陣列
原題目 給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 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,...