劍指offer練習(一)

2021-07-27 23:00:40 字數 937 閱讀 9158

寫在前面:

純粹開個部落格督促自己刷題而已,只是把每個題的相對較好的解法蒐集過來,以便自己以後好找而已,以後也會不時寫一些跟產品經理學習有關的東西,理由同上,希望自己能堅持下去。

解法:首先遍歷原字串,找出字串的長度以及其中的空格數量,

根據原字串的長度和空格的數量我們可以求出最後新字串的長度。

設定兩個指標originalindex和newindex分別指向原字串和新字串的末尾位置。

如果originalindex指向內容不為空格,那麼將內容賦值給newindex指向的位置,如果originalindex指向為空格,那麼從newindex開始賦值「02%」

直到originalindex==newindex時表明字串中的所有空格都已經替換完畢。

2.輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值

解法:解決這個問題肯定要遍歷鍊錶。遍歷的順序是從頭到尾的順序,可輸出的順序卻是從尾到頭。也就是說第乙個遍歷到的結點最後乙個輸出,而最後乙個遍歷到得結點第乙個輸出。這就是典型的「後進先出」,可以用棧實現這種順序。每經過乙個結點的時候,把該結點放到乙個棧中。當遍歷完整個鍊錶後,再從棧頂開始逐個取出節點的值,放入vector容器中。

3.輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

解法:

前序遍歷序列的第乙個數(後序遍歷的最後乙個數)一定是根結點,所以可以根據此結點在中序序列中的位置把中序序列分為左子樹和右子數兩個部分,同樣的道理,在左子樹和右子數中同樣可以用到這樣的規律來確定每個中間結點。

劍指offer陣列練習

1.面試題第56題 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。1 最初的思路 將陣列中的第乙個數字與其他的數字進行對比,如果有與它相同的就將第二個數字與其他數字對比,依次下去。問題 會發現時間複雜度過高。真正寫 時會根據題目的特徵加一些判斷,來減小比...

劍指offer之Python練習二

1.輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,class solution def getleastnumbers solution self,tinput,k write code here if len tinput ...

劍指offer之Python練習三

1.用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution def init self self.stack1 self.stack2 def push self,node write code here def pop self return...