Python實現(xiàn)的旋轉數(shù)組功能算法示例
本文實例講述了Python實現(xiàn)的旋轉數(shù)組功能算法。分享給大家供大家參考,具體如下:
一、題目
給定一個數(shù)組,將數(shù)組中的元素向右移動 k 個位置,其中 k 是非負數(shù)。
例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]
說明:
1.盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
2.要求使用空間復雜度為 O(1) 的原地算法。
二、解法
解法一
以倒數(shù)第 k 個值為分界線,把 nums 截成兩組再組合。因為 k 可能大于 nums 的長度(當這兩者相等的時候,就相當于 nums 沒有移動),所以我們?nèi)?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 最后一位移動到第一位,然后刪除最后一位,循環(huán)k次。k = k % len(nums)
,取余
代碼如下:
if nums: k = k % len(nums) while k > 0: k -= 1 nums.insert(0, nums[-1]) 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, 4]
解法三
先把 nums 復制到 old_nums ,然后 nums 中索引為 x 的元素移動 k 個位置后,當前索引為 x+k,其值為 old_nums[x]
。,所以我們把 x+k 處理成 (x+k)%len(nums)
,取余操作,減少重復的次數(shù)。
代碼如下:
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相關內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)組操作技巧總結》、《Python數(shù)據(jù)結構與算法教程》、《Python列表(list)操作技巧總結》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
如何通過pycharm實現(xiàn)對數(shù)據(jù)庫的查詢等操作(非多步操作)
這篇文章主要介紹了如何通過pycharm實現(xiàn)對數(shù)據(jù)庫的查詢等操作(非多步操作),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Python?Asyncio中Coroutines,Tasks,Future可等待對象的關系及作用
這篇文章主要介紹了Python?Asyncio中Coroutines,Tasks,Future可等待對象的關系及作用,文章圍繞主題展開詳細的內(nèi)容介紹,需要的小伙伴可以參考一下2022-06-06python數(shù)據(jù)可視化之matplotlib.pyplot基礎以及折線圖
不論是數(shù)據(jù)挖掘還是數(shù)據(jù)建模,都免不了數(shù)據(jù)可視化的問題,對于Python來說,Matplotlib是最著名的繪圖庫,它主要用于二維繪圖,這篇文章主要給大家介紹了關于python數(shù)據(jù)可視化之matplotlib.pyplot基礎以及折線圖的相關資料,需要的朋友可以參考下2021-07-07