實現(xiàn)Python3數組旋轉的3種算法實例
Python3實現(xiàn)旋轉數組的3種算法
下面是Python3實現(xiàn)的旋轉數組的3種算法。
一、題目
給定一個數組,將數組中的元素向右移動 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]
說明:
1.盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個問題。
2.要求使用空間復雜度為 O(1) 的原地算法。
二、解題算法
解法一
以倒數第 k 個值為分界線,把 nums 截成兩組再組合。因為 k 可能大于 nums 的長度(當這兩者相等的時候,就相當于 nums 沒有移動),所以我們取 k % len(nums),k 和 nums 的長度取余,就是最終我們需要移動的位置
代碼如下:
if nums: k = k % len(nums) nums[:]=nums[-k:]+nums[:-k]
時間:64ms
假設:
nums= [1,2,3,4,5,6,7]
k =3
運行結果:
[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
假設:
nums= [1,2,3,4,5,6,7]
k =3
運行結果:
[5, 6, 7, 1, 2, 3, 4]
解法三
先把 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
假設:
nums= [1,2,3,4,5,6,7]
k =3
運行結果:
[5, 6, 7, 1, 2, 3, 4]
到此這篇關于實現(xiàn)Python3數組旋轉的3種算法實例的文章就介紹到這了,更多相關3種算法實現(xiàn)Python3數組的旋轉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于python下cv.waitKey無響應的原因及解決方法
今天小編就為大家分享一篇關于python下cv.waitKey無響應的原因及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Django認證系統(tǒng)實現(xiàn)的web頁面實現(xiàn)代碼
這篇文章主要介紹了Django認證系統(tǒng)實現(xiàn)的web頁面實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08Python手拉手教你爬取貝殼房源數據的實戰(zhàn)教程
隨著人工智能的不斷發(fā)展,機器學習這門技術也越來越重要,很多人都開啟了學習機器學習,本文就介紹了機器學習的基礎內容,了解python爬蟲,本文給大家分享Python爬取貝殼房源數據的實戰(zhàn)教程,感興趣的朋友一起學習吧2021-05-05Python打工人必備之windows倒計時鎖屏功能的實現(xiàn)
每個人的電腦里都會有不想讓別人知道的隱私,或者是上班時間偷偷摸魚怕被發(fā)現(xiàn)的小秘密。那怎么辦?就干脆把隱私鎖起來!從源頭上杜絕被他人偷窺自己的隱私。本文就來用Python實現(xiàn)一個windows倒計時鎖屏功能,需要的可以參考一下2023-04-04Python redis操作實例分析【連接、管道、發(fā)布和訂閱等】
這篇文章主要介紹了Python redis操作,結合實例形式分析了Python redis的連接、管道、發(fā)布和訂閱等相關概念、原理及操作技巧,需要的朋友可以參考下2019-05-05