Letcode陣列題 189 旋轉陣列

2021-10-06 18:26:58 字數 1126 閱讀 5185

題目:給定乙個陣列,將陣列中的元素向右移動 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,2,3,4]

對於[1,2,3,4,5,6,7]

根據k=k%n,將陣列分為兩段:

第一段,對應陣列下標範圍[0,n-k-1]段,即[1,2,3,4]

第二段,對應陣列下標範圍[n-k,n-1],即[5,6,7]

分為三步:

反轉第一段,[4,3,2,1,5,6,7]

反轉第二段,[4,3,2,1,7,6,5]

反轉整體,[5,6,7,1,2,3,4]

完成!複雜度分析

時間複雜度:o(n)

空間複雜度:o(1)

**

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

defswap

( i, j)

:while

(i < j)

: temp = nums[i]

nums[i]

= nums[j]

nums[j]

= temp

i +=

1 j -=

1 swap(

0, n-k-1)

swap(n-k, n-1)

swap(

0, n-

1)

leetcode 189題旋轉陣列

我使用python語言寫的,主要有兩種方法。1.先將整個陣列反轉,在分別反轉前k個和後k個,思路很簡單。2.第2種方法是利用python中對list的一些操作,將list分片後再重新組合 兩種方法的 如下 注釋中也謝了思路 class solution object def rotate 1 sel...

189 旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 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,2,3,...

189 旋轉陣列

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。說明 class solution def rotate self,nums list int k int none do not return anything,modify nums in place instead.n le...