給定兩個陣列
a = [4,5,6,9,0,0,0]
b = [1,2,3]
最後輸出[1, 2, 3, 4, 5, 6, 9]
def
sorttwosortedarry
(a,b)
: b_num =
len(b)
a_num =
len(a)
-b_num
li =
i ,j =0,
0# 雙針模型從左往右掃瞄,終止條件是,只要任意乙個陣列走完了,
# 走完了沒有完的那個陣列直接接上就行了
while iif a[i]
<= b[j]:)
i +=
1if b[j]
< a[i]:)
j +=
1# 沒走完的直接把尾巴接上去
li += a[i:a_num]
li += b[j:b_num]
return li
def
sorttwosortedarry_in_place
(a,b)
: b_num =
len(b)
total_num =
len(a)
a_num = total_num-b_num
# 原地方式,就需要倒著放,這個也是比較一般的思路
# 原地操作一般想法,一是,取出乙個元素放在空中,留出乙個空
# 二是純粹通過交換來實現
# 三是,**有空位就往**放,倒著放是一種思路
# 指向陣列a的陣列
i = a_num-
1# 指向陣列b
j = b_num-
1# 最終結果的指標
k = total_num-
1while i >=
0and j>=0:
if a[i]
>= b[j]
: a[k]
= a[i]
i -=
1 k -=
1if b[j]
> a[i]
: a[k]
= b[j]
j -=
1 k -=
1# 把尾巴接上
# a[:i+1] = a[:i+1]
a[:j+1
]= b[
:j+1
]
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]
原地合併兩個有序陣列
昨天看到一篇關於合併兩個陣列的題目 在乙個大陣列a n a 0 a mid 1 和a mid a n 1 分別有序,怎樣在o 1 的空間複雜度下完成將兩個子陣列合併到a n 中。一開始想到了直接插入排序,前面是有序的嘛,直接從第mid個開始往前面插,這樣一來空間複雜度滿足要求,但是時間複雜度為o n...
陣列實現雙堆疊
在乙個陣列中實現兩個堆疊 20 分 本題要求在乙個陣列中實現兩個堆疊。stack createstack int maxsize bool push stack s,elementtype x,int tag elementtype pop stack s,int tag 其中tag是堆疊編號,取1...
陣列實現雙鏈表
之前寫了陣列實現單鏈表,提到了陣列實現鍊錶比指標實現最大的優點就是快,可以隨機訪問,而且不用new節點。在圖論的題目裡用到鄰接表,往往都是用陣列實現。陣列實現雙鏈錶比單鏈表就多了一些對於左指標的操作。為了實現的方便,不像在單鏈表實現裡用乙個額外的變數head去記錄鍊錶的頭節點。而是直接用兩個哨兵節點...