接下來會在開頭簡單的整理下月童度河每天所讀部分的讀書筆記节猿,增加儀式感和思考的精度票从,拋磚引玉,希望能為看到文章的朋友帶來一些生活的啟示,認真生活纫骑,踏踏實實寫代碼蝎亚,復盤代碼
- 相愛
我問他為什么要睡我的房間,他說先馆,人生可貴发框,我和你在一起的機會不多
深愛的本質是悲憫
愛一個人,先讓心清爽和溫厚起來是首要
只管走著煤墙,不必逗留梅惯,去采摘臨路的鮮花來保存,因為一路上仿野,花會繼續(xù)自然地開著......人們應該帶著更多的了解來彼此靠近铣减,說,當我靠近你脚作,我心里某些東西開始舞蹈葫哗,如果你和我有同樣的感覺,或許我們可以相處幾天.......人生短暫
好的關系球涛,應該共行趨向解脫劣针,而不是使彼此陷入更深的輪回,初級的愛是一種深深的束縛和纏繞亿扁,高級的愛是得以解脫- 葬禮
泰戈爾--像一群思想的鶴鳥捺典,日夜飛向他們的山巢,在我向你合十膜拜之中从祝,讓我全部的聲明襟己,啟程回到它永久的家鄉(xiāng)
題12--調整數(shù)組順序奇數(shù)位與偶數(shù)的前面
關于本題的解題思路書中上進行了示例演示、方法依舊是在數(shù)組的前后設立指針
在進行解題之前牍陌,需要了解位與判斷奇偶的方
- 0x開頭表示的是16進制擎浴,0開頭是8進制,無特殊符號的為10進制毒涧,0x1表示為00000001
- k&0x1如果得到的結果為1退客,說明k為奇數(shù),如果為0,說明k為偶數(shù)
下面為代碼和注釋部分链嘀,分為兩種方法一種是簡單的基本方法萌狂,另外一種是加入了擴展函數(shù),可以通過改變擴展函數(shù)來解決類似的問題(比如:把能被3整除的數(shù)放置在不能被三整除的數(shù)前面)
方法1
利用位與運算
"""
class solution(object):
def __init__(self,array,odd=[],even=[]):
self.array=array#自定義數(shù)組
self.odd=odd#存儲奇數(shù)的列表
self.even=even#存儲偶數(shù)的列表
def odd_even(self):
if self.array==[]:
return None
if len(self.array)==1:
return self.array[0]
for i in self.array:
if i & 0x1==0:#說明為偶數(shù)
self.even.append(i)
if i & 0x1==1:#s說明為偶數(shù)
self.odd.append(i)
return self.odd+self.even
def main():
s=solution([1,2,3,4,5,6,7])
print (s.odd_even())
if __name__=='__main__':
main()
"""
方法2
指針和擴展函數(shù)的使用
"""
class solution(object):
def __init__(self,array):
self.array=array
def odd_even(self):#其中func為擴展的功能函數(shù)怀泊,只寫進去函數(shù)名字即可
if len(self.array)==0:#當自定義的數(shù)組為空的時候
return None
if len(self.array)==1:#當自定義的數(shù)組為1的時候
return self.array[0]
a_begin=0#第一個指針設定在頭部
a_end=len(self.array)-1#第二個指針設定在尾部
while a_begin<a_end:#當前指針的索引值小于后指針的索引值的時候茫藏,說明換位還沒有結束
while a_begin<a_end and not self.is_even(self.array[a_begin]):#當前指針的索引值小于后指針的索引值且,對應的值不是偶數(shù)時
a_begin+=1#前移一位
while a_begin<a_end and self.is_even(self.array[a_end]):#當前指針的索引值小于后指針的索引值且霹琼,對應的值是偶數(shù)時
a_end-=1
if a_begin<a_end:#當進行了前邊的指針移動后务傲,如果前指針的索引還小于后指針的索引的時候
self.array[a_begin],self.array[a_end]=self.array[a_end],self.array[a_begin]#互換位置
return self.array
def is_even(self,n):
return not n&0x1 #n&0x1默認的輸出值為1凉当,因此該函數(shù)返回的正向結果是偶數(shù),即偶數(shù)為True,奇數(shù)為False
def main():
s=solution([1,2,3,4,5,6,7])
#print (type(s.odd_even()))
print (s.odd_even())
if __name__=='__main__':
main()
在進行下一題的切換之前售葡,進行一些概念的陳述
- 魯棒性(Robust)
指的是程序能夠判斷輸入是否合乎規(guī)范要求看杭,并對不合要求的輸入予以合理的處理。容錯性是魯棒性的一個重要的特點
本質上就是要多考慮邊界性的問題
題13--鏈表中倒數(shù)第k個節(jié)點
輸入一個鏈表挟伙,輸出鏈表的第k個節(jié)點
剛開始的時候會想到先遍歷到鏈表的最后楼雹,然后再回溯k步,但是尖阔,單向鏈表的只有從前往后的指針贮缅,但是沒有從后往前的指針,所以此思路對于單向鏈表行不通
那么書中提供了兩種思路第一就是需要遍歷鏈表兩次
正如上邊所講的介却,如果面試官需要你只遍歷一次單向鏈表谴供,那該是怎樣的思路呢?本題的思路十分的巧妙和新奇齿坷,書中是這樣描述的
有了以上的思路后桂肌,下面為代碼和注釋部分:
"""
遍歷單線鏈表一次
輸出倒數(shù)第k個節(jié)點
"""
class node(object):#定義一個單向鏈表
def __init__(self,value=None,next=None):
self.value=value
self.next=None
class solution(object):
def printk_node(self,head,k):#兩個變量,一個是鏈表頭永淌,即是第一個指針的起始位置崎场,k為要輸出的節(jié)點的倒數(shù)第k個的位置
if head==None or k<=0:#首先考慮到邊界問題
return None
pointer_ahead=head#首先將前指針實例化為表頭
pointer_behind=None#初始化第二個指針,因為第一個指針還沒有向前移動仰禀,所以第二個指針初始化為None
for i in range(k-1):#第一個指針開始移動
if pointer_ahead.next!=None:
pointer_ahead=pointer_ahead.next
else:
return pointer_ahead.value
pointer_behind=head#當?shù)谝粋€指針移動K-1步的時候,第二個指針從表頭開始準備遍歷
while pointer_ahead.next!=None:#說明還沒遍歷到鏈表的尾部
pointer_ahead=pointer_ahead.next#第一個指針繼續(xù)后移
pointer_behind=pointer_behind.next#第二個指針也后移
return pointer_behind#最終返回該節(jié)點蚕愤,就是我們要找的倒數(shù)第k個節(jié)點
def main():
n1=node(1)
n2=node(2)
n3=node(3)
n4=node(4)
n5=node(5)
n1.next=n2
n2.next=n3
n3.next=n4
n4.next=n5
s=solution()
print (s.printk_node(n1,1).value)
if __name__=='__main__':
main()
今天的結語是: persistence答恶、 persistence、 persistence萍诱!