LC練習 旋轉陣列

2021-10-10 19:20:28 字數 2129 閱讀 6144

每次旋轉一步,重複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,...