合并数组:双针模型,原地实现
生活随笔
收集整理的這篇文章主要介紹了
合并数组:双针模型,原地实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
合并數(shù)組
給定兩個(gè)數(shù)組
a = [4,5,6,9,0,0,0]
b = [1,2,3]
最后輸出[1, 2, 3, 4, 5, 6, 9]
第一種實(shí)現(xiàn)方式雙針模型:
def sortTwoSortedArry(a,b):b_num = len(b)a_num = len(a)-b_numli = []i ,j =0,0# 雙針模型從左往右掃描,終止條件是,只要任意一個(gè)數(shù)組走完了,# 走完了沒有完的那個(gè)數(shù)組直接接上就行了while i<a_num and j <b_num:if a[i] <= b[j]:li.append(a[i])i +=1if b[j] < a[i]:li.append(b[j])j +=1# 沒走完的直接把尾巴接上去li += a[i:a_num]li += b[j:b_num] return li第二種方式原地實(shí)現(xiàn):
def sortTwoSortedArry_in_place(a,b):b_num = len(b)total_num = len(a)a_num = total_num-b_num# 原地方式,就需要倒著放,這個(gè)也是比較一般的思路# 原地操作一般想法,一是,取出一個(gè)元素放在空中,留出一個(gè)空# 二是純粹通過交換來實(shí)現(xiàn)# 三是,哪里有空位就往哪里放,倒著放是一種思路# 指向數(shù)組a的數(shù)組i = a_num-1# 指向數(shù)組bj = b_num-1# 最終結(jié)果的指針k = total_num-1while i >=0 and j>=0:if a[i] >= b[j]:a[k] = a[i]i -=1k -=1if b[j] > a[i]:a[k] = b[j]j -=1k -=1 # 把尾巴接上 # a[:i+1] = a[:i+1]a[:j+1] = b[:j+1]運(yùn)行結(jié)果
a = [4,5,6,9,0,0,0] b = [1,2,3] print(sortTwoSortedArry(a,b)) print(a) sortTwoSortedArry_in_place(a,b) print(a)runfile('D:/share/test/arry_and.py', wdir='D:/share/test') [1, 2, 3, 4, 5, 6, 9] [4, 5, 6, 9, 0, 0, 0] [1, 2, 3, 4, 5, 6, 9]總結(jié)
以上是生活随笔為你收集整理的合并数组:双针模型,原地实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kSum,实现方式,动态规划
- 下一篇: 双针模型:验证括号,特殊case处理