題目描述:給定乙個單詞列表,我們將這個列表編碼成乙個索引字串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 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義乙個同名的區域性變數...