記一組面試題

2022-04-14 11:55:07 字數 1595 閱讀 4422

"""

我當時用的是python的內建函式,現在想想應該自己實現乙個堆排序的,這個才是最好的排序方式

堆排序裡面的儲存結構是陣列 邏輯結構是二叉樹

"""def heapsortmax(lst, n):

# 找出最大值登頂對頂

# n = len(lst)

if n <= 1:

return lst

depth = n // 2 - 1 # 這個深度是0~depth

# 下面開始調整堆 從最後乙個非終端節點開始調整

for i in range(depth, -1, -1):

topmax = i

leftchild = 2 * i + 1

rightchild = 2 * i + 2 # 左右孩子節點

# 從這三個節點裡面選出最大值 還要不能越界才得行

if leftchild <= n - 1 and lst[leftchild] > lst[topmax]:

topmax = leftchild

if rightchild <= n - 1 and lst[rightchild] > lst[topmax]:

topmax = rightchild

if i != topmax:

lst[topmax], lst[i] = lst[i], lst[topmax]

return lst

def heapsort(lst):

n = len(lst)

for i in range(n):

lastmesslen = n - i

# 每次登頂了陣列長度就少了乙個了

heapsortmax(lst, lastmesslen)

# print(lst)

if i < n:

lst[0], lst[lastmesslen - 1] = lst[lastmesslen - 1], lst[0]

# 這個位置為什麼是lastmesslen-1呢?道理很簡單

# 最後乙個元素本來就是lastmesslen-1,lastmesslen已經越界了

# print("ex", lst)

return lst

if __name__ == "__main__":

lst = [3, 1, 5, 4, 7, 6, 8, 0]

# lst = heapsortmax(lst)

lst = heapsort(lst)

print(lst)

def func(str):

dic = {}

for el in str:

if dic.get(el):

dic[el] = dic[el] + 1

else:

dic[el] = 1

key, value = "", 0

for item in dic.items():

if item[1] > value:

value = item[1]

key = item[0]

return key, value

趣味面試題第一組

第一組 1.燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時乙個小時十五分鐘呢?2.你有一桶果凍,其中有黃色 綠色 紅色三種,閉上眼睛抓取同種顏色的兩個。抓取多少個就可以確定你肯定有兩個同一顏色的果凍?4.乙個岔路口分別通向誠實國和說謊國。來了兩個人...

面試題 k個一組翻轉單鏈表

鍊錶中的節點每k個一組翻轉 注意點 對於上面注意點的第三條,要封裝的函式如下 注意下面的函式是左閉右開即只翻轉綠色的部分 翻轉一段鍊錶 左閉右開 翻轉從start到end之間的鍊錶 public listnode reverselist listnode start,listnode end ret...

經典面試題 k節點一組旋轉鍊錶

題目 給出乙個鍊錶和乙個數k,比如鍊錶1 2 3 4 5 6,k 2,則翻轉後2 1 4 3 6 5,若k 3,翻轉後3 2 1 6 5 4,若k 4,翻轉後4 3 2 1 5 6。如果節點的數量是不k的倍數則最終留出節點應該保持原樣,每k個一反轉,不到k個不用反轉。用程式實現。美團校招 來自lee...