LeetCode初級演算法 陣列 3 旋轉陣列

2021-08-26 05:37:07 字數 1577 閱讀 5132

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

示例 2:

輸入: [-1,-100,3,99] 和 k = 2

輸出: [3,99,-1,-100]

解釋:向右旋轉 1 步: [99,-1,-100,3]

向右旋轉 2 步: [3,99,-1,-100]

說明:從陣列的最後的乙個元素開始,陣列長度為i,第j步旋轉將第i個元素儲存,然後從i開始逐個遞減陣列向右旋轉,最後把第i個元素賦給第乙個位置上完成一次旋轉,共迴圈k次。(該演算法存在效率低下的問題,演算法複雜度為

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 輸入 ...