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