創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
尋烏ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!這篇文章將為大家詳細(xì)講解有關(guān)實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
Python3實(shí)現(xiàn)旋轉(zhuǎn)數(shù)組的3種算法
下面是Python3實(shí)現(xiàn)的旋轉(zhuǎn)數(shù)組的3種算法。
一、題目
給定一個(gè)數(shù)組,將數(shù)組中的元素向右移動(dòng) k 個(gè)位置,其中 k 是非負(fù)數(shù)。
例如:
輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右旋轉(zhuǎn) 1 步: [7,1,2,3,4,5,6]
向右旋轉(zhuǎn) 2 步: [6,7,1,2,3,4,5]
向右旋轉(zhuǎn) 3 步: [5,6,7,1,2,3,4]
說(shuō)明:
1.盡可能想出更多的解決方案,至少有三種不同的方法可以解決這個(gè)問(wèn)題。
2.要求使用空間復(fù)雜度為 O(1) 的原地算法。
二、解題算法
解法一
以倒數(shù)第 k 個(gè)值為分界線,把 nums 截成兩組再組合。因?yàn)?k 可能大于 nums 的長(zhǎng)度(當(dāng)這兩者相等的時(shí)候,就相當(dāng)于 nums 沒(méi)有移動(dòng)),所以我們?nèi)?k % len(nums),k 和 nums 的長(zhǎng)度取余,就是最終我們需要移動(dòng)的位置
代碼如下:
if nums: k = k % len(nums) nums[:]=nums[-k:]+nums[:-k]
時(shí)間:64ms
假設(shè):
nums= [1,2,3,4,5,6,7]
k =3
運(yùn)行結(jié)果:
[5, 6, 7, 1, 2, 3, 4]
解法二
先把 nums 最后一位移動(dòng)到第一位,然后刪除最后一位,循環(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()
時(shí)間:172ms
假設(shè):
nums= [1,2,3,4,5,6,7]
k =3
運(yùn)行結(jié)果:
[5, 6, 7, 1, 2, 3, 4]
解法三
先把 nums 復(fù)制到 old_nums ,然后 nums 中索引為 x 的元素移動(dòng) k 個(gè)位置后,當(dāng)前索引為 x+k,其值為 old_nums[x]。,所以我們把 x+k 處理成 (x+k)%len(nums),取余操作,減少重復(fù)的次數(shù)。
代碼如下:
if nums: old_nums = nums[:] l = len(nums) for x in range(l): nums[(x+k) % l] = old_nums[x]
時(shí)間:64ms
假設(shè):
nums= [1,2,3,4,5,6,7]
k =3
運(yùn)行結(jié)果:
[5, 6, 7, 1, 2, 3, 4]
關(guān)于實(shí)現(xiàn)Python3數(shù)組旋轉(zhuǎn)的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。