q:輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。你要是這樣寫
class
solution
:def
reorderarray
(self, list1)
: evenlist, oddlist =
,[]for item in list1:
if item %2==
0return oddlist + evenlist
if __name__ ==
'__main__'
: s = solution(
) l =
list
(eval
(input
('輸入陣列:'))
)print
(s.reorderarray(l)
)
這個應該是正常的邏輯,但我們盡量不要這麼寫,因為這邊涉及到時間空間複雜度的大小問題。
你用插值排序演算法的話空間複雜度就只有o(1)
class
solution
:def
reorderarray
(self, list1)
:if list1 ==
none
:return
'空'for i in
range
(len
(list1)):
j = i
if list1[j]%2
==1:if j ==0:
pass
else
:while list1[j -1]
%2==0
: list1[j -1]
, list1[j]
= list1[j]
, list1[j -1]
j -=
1return list1
if __name__ ==
'__main__'
: s = solution(
) ll =
list
(eval
(input
('輸入陣列:'))
)print
(s.reorderarray(ll)
)
q:輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。思路
設2個指標,p1,p2,p2先走k-1步,然後p1開始和p2一起動,p2走到最後時,p1所在位置就是倒數第k個結點
class
solution
:def
findk
(self, head, k)
:if head ==
none
or k <=0:
return
none
p2 = head
p1 = head
while k >1:
if p2.
next
!=none
: p2 = p2.
next
k -=
1else
:return
none
while p2.
next
!=none
: p1 = p1.
next
p2 = p2.
next
return p1
q:輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭思路
1->2->3->4->5
設1->none,2->1,…5->4,得到反轉鍊錶。
def
rerverselist
(self, phead)
:if phead ==
none
or phead.
next
==none
:return phead
pre =
none
cur = phead
while cur != pre:
tmp = cur.
next
cur.
next
= pre
pre = cur
cur = tmp
return pre
tmp = cur.
next
cur.
next
= pre
pre = cur
cur = tmp
return pre
劍指offer Python3版 九
q 請實現 copyrandomlist 函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個 next 指標指向下乙個節點,還有乙個 random 指標指向鍊錶中的任意節點或者 null 思路 複製鍊錶 cur a b c cloned a b c 複製的鍊錶依次加到原煉表後 a a b b ...
劍指offer Python3實現
使用python3編寫 劍指offer 所有演算法,在參考牛客網,劍指offer書本以及其他前輩所寫的程式的同時,也加入了自己的解題思路,力爭用簡單的語言描述清楚。所有的程式均已上傳到github,之後將持續整理更新,題目的順序與牛客網基本一致。原始碼位址 試題 3 二維陣列中的查詢 試題 4 替換...
劍指offer Python版 替換空格
問題1 替換字串,是在原來的字串上做替換,還是可以重新定義乙個字串做替換 問題2 從前往後替換和從後往前替換一樣嗎?從左往右遍歷元素,若當前元素為空格,則插入 20 並將字串長度增加3.時間複雜度o n n coding utf 8 class solution s 源字串 def replaces...