《leetcode》華為技術面試題庫

2021-10-08 12:56:01 字數 2203 閱讀 3700

題目描述:給定乙個單詞列表,我們將這個列表編碼成乙個索引字串s與乙個索引列表a。例如,如果這個列表是["time", "me", "bell"],我們就可以將其表示為s = "time#bell#"indexes = [0, 2, 5]。對於每乙個索引,我們可以通過從字串s中索引的位置開始讀取字串,直到 "#" 結束,來恢復我們之前的單詞列表。那麼成功對給定單詞列表進行編碼的最小字串長度是多少呢?

解題思路:目標是保留所有不是其他單詞字尾的單詞,因此考慮使用字典樹的方法。找到是否不同的單詞具有相同的字尾,我們可以將其反序之後插入字典樹中。例如,我們有 "time" 和 "me",可以將 "emit" 和 "em" 插入字典樹中。

# 定義字典樹中的乙個節點

class node(object):

def __init__(self):

self.children={}

class solution:

def minimumlengthencoding(self, words: list[str]) -> int:

words = list(set(words)) #需要去重,否則在之後計算「葉子高度」的時候會重複計算

trie=node() #這是字典樹的根

nodes= #這裡儲存著每個word對應的最後乙個節點,比如對於單詞time,它儲存字母t對應的節點(因為是從後往前找的)

for word in words: #逐個單詞遍歷

now=trie #定義臨時變數儲存當前節點

for w in reversed(word): #字串反轉

if w in now.children: #如果在,就繼續往下遍歷

now=now.children[w]

else:

now.children[w]=node()

now=now.children[w]

ans=0

for w,c in zip(words,nodes):

if len(c.children)==0: #沒有children,意味著這個節點是個葉子,nodes儲存著每個word對應的最後乙個節點,當它是乙個葉子時,我們就該累加這個word的長度+1,這就是為什麼我們在最開始要去重

ans+=len(w)+1

return ans

題目描述:這裡有 n 個航班,它們分別從 1 到 n 進行編號。我們這兒有乙份航班預訂表,表中第 i 條預訂記錄 bookings[i] = [i, j, k] 意味著我們在從 i 到 j 的每個航班上預訂了 k 個座位。請你返回乙個長度為 n 的陣列 answer,按航班編號順序返回每個航班上預訂的座位數。

解題思路:這個題如果採用暴力法,嘗試後發現超時,因此考慮使用差分數列的思想。每一次區間性累加,差分數列變的值都是兩端的,因此每次計算只要算兩個值即可。時間複雜度大大減小。

class solution:

def corpflightbookings(self, bookings: list[list[int]], n: int) -> list[int]:

res=(n+1)*[0]

for i,j,k in bookings:

res[i-1]+=k

res[j]-=k

for i in range(1,n):

res[i]+=res[i-1]

return res[:-1]

題目描述:給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

示例 1:

輸入: "babad"

輸出: "bab"

注意: "aba" 也是乙個有效答案。

解題思路:首先這是要求乙個回文串,並且求的是子串。這種情況下,首先考慮使用中心擴散法,從中間位置向兩邊擴散。

class solution 

if(current) cur->next=new listnode(1);

return newlist->next;

}};

華為技術面試

9.14 上午十點半華為第一輪面試 1 人工智慧 說乙個演算法 仔細描述 2 編譯原理的過程 語法分析的具體實施過程 3tcp與udp的區別 4 程序與執行緒的區別 5 快速排序的過程 講解 1 人工智慧 我學習了 遺傳演算法 下面我講一下遺傳演算法 2編譯的過程 源 預處理 彙編 目標 可執行檔案...

2019華為技術筆試題(1道)

因為資料結構沒有學過,所以只做出第一道很簡單的,根據回憶寫一下。定義9個字元為一組,9個字元中,第乙個為 0 時,倒序輸出後面8個字元,第二個字元為 1 正序輸出後面8個字元 程式要求 輸入 先輸入整型數字,代表將輸入幾個組的字元 後輸入字串組 輸出 根據每組字串的第乙個字元輸出後面8個字元,每組字...

華為面試題

1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義乙個同名的區域性變數...