面試演算法題總結 一

2021-09-25 06:53:45 字數 4203 閱讀 7082

思想,每次隨機取乙個數,將大於其的放在右邊,小於或等於其的放在左邊,如此遞迴

def

quicksort

(arr):if

len(arr)

<=1or

len(

list

(filter

(lambda a:a==arr[0]

,arr)))

==len

(arr)

:return arr

middle = random.choice(

range

(len

(arr)))

left =

right =

for i, num in

enumerate

(arr)

:if num <= arr[middle]

:elif num > arr[middle]

: left = quicksort(left)

right = quicksort(right)

left.extend(right)

return left

其他實現方法

思想:使用字典型別存貯key,node,node存的是雙向鍊錶的引用,在雙向鍊錶中存貯value,當get 或者 put時,將該node放在雙向鍊錶的頭部,若put時超出size,則將末尾的node刪除。

class

lrucache

(object):

def__init__

(self, size:

int)

: self.size = size

self.cache =

self.head =

none

self.tail =

none

defget

(self, key:

str)

: node = self.cache.get(key)

self.head.deletenode(node)

self.head = node

return self.head

defput(self, key, value)

: node = dulinklist(value)

if self.head is

none

: self.head = node

self.tail = key

self.cache[key]

= node

return self.head

print

('len'

,len

(self.cache.keys())

)iflen(self.cache.keys())

>= self.size:

last = self.head.delete(

) last_key =

filter

(lambda item: last == item[1]

, self.cache.items())

last_key =

list

(last_key)[0

][0]

del self.cache[last_key]

# del self.cache[last.value]

self.head = node

self.cache[key]

= node

return self.head

class

dulinklist

(object):

def__init__

(self, value)

: self.pre = self

self.value = value

self.

next

= self

# 新增乙個元素,放在最前面

def(self, node)

:# 最後乙個的下乙個是新插入的節點

self.pre.

next

= node

# 新插入節點的上乙個是最後乙個

node.pre = self.pre

# 現在節點的前面乙個是新插入的節點

self.pre = node

node.

next

= self

# 從末尾刪除乙個元素

defdelete

(self)

: last = self.pre

self.pre.pre.

next

= self

self.pre = self.pre.pre

return last

# 從雙向鍊錶中刪除乙個元素

defdeletenode

(self, node)

: node.

next

.pre = node.pre

node.pre.

next

= node.

next

defiterlru

(lru)

: node = lru.head

while node:

print

(node.value)

node = node.

next

if node is lru.head:

break

print

('-----'

)if __name__ ==

'__main__'

: lru = lrucache(5)

lru.put(1,

1)lru.put(2,

2)lru.put(3,

3)lru.put(4,

4)lru.put(5,

5)lru.get(3)

lru.get(4)

lru.put(6,

6)lru.put(7,

7)iterlru(lru)

class

tree

(object):

def__init__

(self, value)

: self.left =

none

self.value = value

self.right =

none

defcomparetree

(tree1, tree2)

:# 如果都為none,返回true

if tree1 is

none

and tree2 is

none

:return

true

# 如果不都為none,其中有乙個是none

if tree1 is

none

or tree2 is

none

:return

false

# 如果值相等

if tree1.value == tree2.value:

# 比較左子節點

left = comparetree(tree1.left, tree2.left)

# 比較右子節點

right = comparetree(tree1.right, tree2.right)

else

:return

false

# 如果左右子節點都相等

if left and right:

return

true

else

:return

false

if __name__ ==

'__main__'

: tree1 = tree(2)

tree1.left = tree(1)

tree1.right = tree(3)

tree2 = tree(2)

tree2.left = tree(1)

tree2.right = tree(3)

print

(comparetree(tree1,tree2)

)

面試演算法題總結 一

華為面試題 寫乙個程式,要求功能 求出用1 2 5 這三個數不同個數組合的和為100 的組合個數。如 100 個1 是乙個組合,5 個1 加19 個5 是乙個組合。請用c 語言寫。答案 最容易想到的演算法是 設x 是1 的個數,y 是2 的個數,z 是5 的個數,number 是組合數 注意到0 x...

面試演算法題

前幾天,一好友去筆試,有一題 現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量 1 1000 的蘋果,都能一次給出?當時,我們都想,出題這人。今天,在想移位的時候,突然想到了,這絕對是二進位制數的變種。分析 1000個蘋果,最接近1024,轉化為2進製...

面試演算法題

1 直方圖矩形最大值 class solution s.push i return res 2 第n個醜數 class solution return res.back 3 lru cache 最近最少使用頁面置換快取器 class lrucache int get int key void set...