任誰都躲不過找工作的問題,好希望能多準備一些時間,奈何時間不等人,每天刷幾道題,並且記錄下來吧:
def replacespace(s):
# write code here
num_space = 0
new_s = ''
for i in range(len(s)):
if i == ' ':
num_space += 1
for i in range(len(s)):
if s[i] == ' ':
new_s = new_s + '%20'
else:
new_s = new_s + s[i]
return new_s
a = ' ii oob '
replacespace(a)
開闢了另外的空間,空間複雜度有點高,但看起來思路很簡單。還有一種做法是首先確定整個字串的長度,然後不斷的插入,並將後邊的字串向後推。
二、 輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。
class listnode:
def __init__(self, val=none):
self.val = val
self.next = none
def printlistfromtailtohead(listnode):
result =
head = listnode
while head:
result.insert(0,head.val)
head = head.next
return result
e1 = listnode(1)
e2 = listnode(2)
e3 = listnode(3)
e4 = listnode(5)
e1.next = e2
e2.next = e3
e3.next = e4
print(e1.next)
printlistfromtailtohead(e1)
首先,我們的定義鍊錶節點類,節點內只有兩個資訊,乙個是該節點的值,另外乙個是節點的下乙個節點。
開闢乙個新空間就乙個列表,在這個列表的列表頭 index = 0 處,不斷的插入鍊錶的值即可
三、 重建二叉樹:
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
利用前序遍歷和中序遍歷之間的關係,使用遞迴的方式求解:
# 重建二叉樹
# 利用 二叉樹的前序遍歷 中序遍歷 重建二叉樹
# 前序遍歷的順序為先根節點再左再右 中序遍歷的順序為先左節點再中再右
# -*- coding:utf-8 -*-
class treenode:
def __init__(self, x):
self.val = x
self.left = none
self.right = none
class solution:
def reconstructbinarytree(self, pre, tin):
# write code here
if len(pre) == 0:
return none
elif len(pre) == 1:
return treenode(pre[0])
else:
root = treenode(pre[0])
position = tin.index(pre[0])
root.left = self.reconstructbinarytree(pre[1:position+1], tin[:position])
root.right = self.reconstructbinarytree(pre[position+1:], tin[position+1:])
return root
四、 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
# 用兩個棧 實現乙個佇列
# 棧的特性是先入後出 佇列的特性是先入先出
# 所以需要用兩個棧 其中乙個負責壓棧設為棧1 另外乙個負責彈棧設為棧2
# 當壓棧時,將元素壓入棧1, 當彈棧時 如果棧2為空,就將棧1的內容彈入棧2 , 此時佇列的頭在棧頂, 將其彈出即可
# 當棧2不為空時,則先彈出棧2的內容,直到其為空
# -*- coding:utf-8 -*-
class solution:
def __init__(self):
self.stack1 =
self.stack2 =
def push(self, node):
# write code here
def pop(self):
# return xx
if len(self.stack2) == 0:
while self.stack1:
return self.stack2.pop()
五、 旋轉陣列
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。
為了降低時間複雜度,這裡一定要使用旋轉陣列的性質,旋轉陣列有兩個分離的陣列構成,而且後邊的小於、等於前邊的。所以這裡的方法就是,二分法,不斷將陣列二分,如果中位點大於左邊的點,就將中位點設為左,否則設為右,遞迴的將問題分解成小問題,邊界條件是 right - left ==1。
# 找旋轉陣列 最小值
# 為了降低時間複雜度 需要利用旋轉陣列的性質
def minnumberinrotatearray(rotatearray):
# write code here
if len(rotatearray) == 0:
return 0
left = 0
mid = 0
right = len(rotatearray) - 1
while rotatearray[left] >= rotatearray[right]:
if (right-left) == 1:
mid = right
break
if rotatearray[left] == rotatearray[mid] and rotatearray[mid] == rotatearray[right]:
return mininside(rotatearray,left ,right)
if rotatearray[left] >= rotatearray[right]:
mid = (left + right) // 2
if rotatearray[mid] >= rotatearray[left]:
left = mid
else:
right = mid
return rotatearray[mid]
def mininside(array,left,right):
result = array[left]
for i in range(left,right+1):
if array[i] < result:
result = array[i]
return result
a = [1,0,1,1,1]
b = minnumberinrotatearray(a)
print(b)
劍指offer刷題記錄
遞迴法 鍊錶的後續遍歷,並用self.k來記錄倒數節點的位置,找到了就返回找到的節點,否則返回none coding utf 8 class listnode def init self,x self.val x self.next none class solution def init self...
劍指offer刷題記錄 綜合
將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入描述 輸入乙個字串,包括數字字母符號,可以為空 輸出描述 如果是合法的數值表達則返回該數字,否則返回0 做這個題目做的真的很煩,最麻煩的就是判斷當前是否越界。可儲存的最大的正數末位為7,可儲存...
Leetcode刷題記錄 劍指offer
面試題3 陣列中重複數字 使用set,時間複雜度o n 空間複雜度o n class solution object deffindrepeatnumber self,nums type nums list int rtype int a set for num in nums if num in ...