Python實現的旋轉陣列功能演算法示例

2022-10-04 17:54:12 字數 1977 閱讀 1887

一、題目

給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。

例1:輸入: [1,2,3,4, 和 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]

說明:1.盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。

2.要求使用空間複雜度為 o(1) 的原地演算法。

二、解法

解法一以倒數第 k 個值為分界線,把 nums 截成兩組再組合lbfni。因為 k 可能大於 nums 的長度(當這兩者相等的時候,就相當於 nums 沒有移動),所以我們取k % len(nums),k 和 nums 的長度取餘,就是最終我們需要移動的位置

**如下:

if nums:

k = k % len(nums)

nums[:]=nums[-k:]+nums[:-k]

時間:64ms,擊敗了98%

附:本機測試示例**:

# -*- coding:utf-8 -*-

nums= [1,2,3,4,5,6,7]

k =3

if nums:

k = k % len(nums)

nums[:]=nums[-k:]+nums[:-k]

print(nums)

執行結果:

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

解法二先把 nums 最後一位移動到第一位,然後刪除最後一位,迴圈k次。k = k % len(nums),取餘

**如下:

if nums:

k = k % len(nums)

while k > 0:

k -= 1

nums.insert(0, nums

nums.pop()

時間:172ms,擊敗了16%

附:本機測試示例**:

# -*- coding:utf-8 -*-

nums= [1,2,3,4,5,6,7]

k =3

if nums:

k = k % len(nums)

while k > 0:

k -= 1

nums.insert(0, nums[-1])

nums.pop()

print(nums)

執行結果:

[5, 6, 7, 1, 2, 3, 4lbfni]

解法三先把 nums 複製到 old_nums ,然後 nums 中索引為 x 的元素移動 k 個位置後,當前索引為 x+k,其值為old_nums[x]。,所以我們把 x+k 處理成(x+k)%len(nums),取餘操作,減少重複的次數。

**如下:

if nums:

old_nums = nums[:]

l = len(nums)

for x in range(l):

nums[(x+k) % l] = old_nums[x]

時間:64ms,擊敗了98%

附:本機測試示例**:

# -*- coding:utf-8 -*-

nums= [1,2,3,4,5,6,7]

k =3

if nums:

old_nums = nums[:]

l = len(nums)

for x in range(l):

nums[(x+k) % l] = old_nums[x]

print(nums)

執行結果:

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

旋轉陣列(python)

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

LeetCode 旋轉陣列(Python版本)

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

33 搜尋旋轉陣列 python

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...