旋轉陣列(python實現)
阿新 • • 發佈:2018-11-23
問題:
給定一個數組,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。
說明:
儘可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
要求使用空間複雜度為 O(1) 的原地演算法。
方法一
class Solution:
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
long = len(nums)
newk= k % long
temp = []
for i in range(long):
temp.append(nums[i-newk])
for j in range(long):
nums[j] = temp[j]
解題思路:
陣列無論怎樣移動,元素之間的順序是不會變得,只要找到最後的狀態即可;
使用一個空陣列 temp = []
儲存 nums
移動後的狀態,然後一對一複製過去即可。
方法二
class Solution :
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
if k == 0 or len(nums) == 0:
return
k = k % len(nums)
nums[:] = nums[len(nums)-k:]+ nums[:len(nums)-k]
解題思路:
將nums
依照k
進行分片,然後進行合併