<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
def move(ls: list, offset): """ 元素原索引+位移數(正為右移,負為左移)之和求關於陣列長度(陣列的模)的餘數,即為位移後的元素索引。 再對新索引升序排序,去除索引,即為位移後的新陣列 :param ls: :param offset: :return: """ mod = len(ls) ids = [[(item[0]+offset)%mod, item[1]] for item in enumerate(ls)] ids.sort(key=lambda item: item[0]) return [item[1] for item in ids] def move2(ls: list, offset): """ 分段反轉,以位移數(對模求餘)為界,分別反轉兩個子陣列,再整體反轉 :param ls: :param offset: :return: """ mod = len(ls) offset = offset % mod tail = list(reversed(ls[mod-offset:])) head = list(reversed(ls[:mod-offset])) return list(reversed(head+tail)) if __name__ == '__main__': nums = [8, 9, 10, 11] print(move(nums, 1)) print(move2(nums, 1)) print(move(nums, -1)) print(move2(nums, -1)) """ [11, 8, 9, 10] [11, 8, 9, 10] [9, 10, 11, 8] [9, 10, 11, 8] """
對含有N個元素的陣列迴圈右移K位,要求時間複雜度為O(N),且只允許使用兩個附加變數。
方法一:蠻力法
要求將陣列元素迴圈右移K位,只需要每次將陣列中元素右移一位,迴圈K次即可。如原陣列為abcd1234,右移4位元具體移動過程為abcd1234-->4abcd123-->34abcd12-->1234abcd。
方法二:翻轉法
直接上例子,對於陣列序列A = [123456],如何實現迴圈右移2位功能?將陣列A分成兩個部分A[0,N-K-1]和A[N-K,N-1],將這兩部分分別翻轉,然後放在一起再翻轉,具體如下:
#方法一 # -*- coding:utf-8 -*- def rightShift(arr,k): if arr == None: print("引數不合法!") return lens = len(arr) k %= lens #因為K不一定小於N,有可能大於等於N,當K≥N時,右移K-N與右移K位效果一樣 while k != 0: #右移k位 tmp = arr[lens-1] #陣列最後一個元素放入臨時變數中 i = lens-1 while i > 0: arr[i] = arr[i-1] #所有元素後移 i -= 1 arr[0] = tmp #第一個元素為初始最後一個元素的值 k -= 1 if __name__ == "__main__": k = 4 arr = ['a','b','c','d','1','2','3','4'] rightShift(arr,k) i = 0 while i < len(arr): print(arr[i],end="") i += 1
執行結果:
1234abcd
#方法二 def reverse(arr,start,end): while start<end: temp = arr[start] arr[start] = arr[end] arr[end] = temp start += 1 end -= 1 def rightShift(arr,k): if arr == None: print("引數不合法!") return lens = len(arr) k %= lens reverse(arr,0,lens-k-1) reverse(arr,lens-k,lens-1) reverse(arr,0,lens-1) if __name__ == "__main__": k = 4 arr = ['a','b','c','d','1','2','3','4'] rightShift(arr,k) i = 0 while i < len(arr): print(arr[i],end="") i += 1
執行結果
1234abcd
方法一每移動一次,其時間複雜度為O(N),故移動K次,總的時間複雜度為O(K*N),0<K<N,且時間複雜度不滿足O(N)。
方法二時間複雜度為O(N),完成翻轉操作只用了一個輔助儲存空間。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45