給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。示例 1:
輸入: [1,2,3,4,5,6,7] 和 k = 3示例 2:輸出: [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,-100,3,99] 和 k = 2說明:從陣列的最後的乙個元素開始,陣列長度為i,第j步旋轉將第i個元素儲存,然後從i開始逐個遞減陣列向右旋轉,最後把第i個元素賦給第乙個位置上完成一次旋轉,共迴圈k次。(該演算法存在效率低下的問題,演算法複雜度為輸出: [3,99,-1,-100]
解釋:向右旋轉 1 步: [99,-1,-100,3]
向右旋轉 2 步: [3,99,-1,-100]
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.
"""for j in range(k):
temp = nums[len(nums)-1]
i = len(nums)-1
while i>0:
nums[i] = nums[i-1]
i-=1
nums[0] = temp
利用python的高階特性——切片,陣列整體向右旋轉k次,故從陣列第nums_len -k 個元素進行切片,將後面的切片移到前面即可解決。例如給定輸入[1,2,3,4,5,6,7],k = 3,陣列切片為[[1,2,3,4],[5,6,7]],移動後得到[5,6,7,1,2,3,4]。
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.
"""nums_len = len(nums)
nums[:] = nums[nums_len - k :] + nums[:nums_len - k]
leetcode 初級演算法 陣列
給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...
Leetcode 初級演算法 陣列
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1...
LeetCode 初級演算法 陣列
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。輸入 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 輸入 ...