畝畸陡-Ivan
A: Interviewer
B: Interviewee
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string "".
A:首先第一題,一開始會給你一個string array,那你要做的事情就是找出他們最大的共同前綴,如果他們沒有共同的前綴的話,那就回傳空字串,這邊有兩個例子(如上,逐字稿省略~),請問你還有什麼問題嘛?
B: 沒有問題,那再做這個問題時,我會把他想成把所有字串並排在一起,然後先檢查他們的第一位是否都一樣,如果一樣那就檢查到下一位,直到檢查到任一個不一樣的,比如說已第一個例子為例(這邊邊寫例子邊講解)
A: 聽起來是個不錯的解法,請你吧他寫出來吧。
B: (如下)
A: 可以請你說明一下這個驗算法的時間複雜度和空間複雜度嘛?
B:
Time complexity O(m*n)
Space complexity O(1)
A: 我們把題目做一些改變,一樣我們會給你一個存放string的陣列,但這個陣列不會有任何更動,是這次多一個 string q 目標是找出 陣列string 和 字串 q 的最長前綴
我希望你可以設計出一個在同個string set下,提高他每次在搜尋與字串q最常相同前綴的方法
以上一題為例
B: 我可以理解為要設計一個資料結構儲存 string set 來加速他的查詢速度嘛?
A: 可以
B: 那我可能會用一個資料結構叫做trie的資料結構,他的特點就是如果字的前綴一樣的話那他們前面的路徑會是一樣的,舉上面的例子來說
trie
f
/
l
/ \
o i
/
w
/
e
/
r
A: 可以解釋為什麼這個資料結構可以加快找出 string set 與 q 的吹長前綴的速度嘛?
B: 因為當他們的前綴一樣,那他們就只會有一個child那當他們開始不同的時候就會出現多個child,因此只要去檢查child的數量是否等於一,如果是零或是大於一那就可以不用在搜尋了,所以他的時間複雜度是O(n) n是指q的長度
A: 那可以請你寫一下你會怎麼定義這個資料結構
B: (如下)
A: 那我們把題目定義完善一點,我們現在會傳入一個trie root以及字串q請你找出他們的最常前綴
B: (如下)
0:00 不要用單聲道,很不舒服
0:00 老問題了,不要講自己是面試官
2:10 Interviewer可以提出更多關於constrain 的要求,比如字串大小會多大,但是interviewee也沒有問,所以這邊是一個大敗筆
1:19 input 看起來明明像是一個list,其中有可能有不同長度的字串也有不同長度的list,Interviewee竟然沒有先詢問是不是只有像螢幕上一樣只有三個input,這點有非常大的瑕疵
2:56 下面一直有東西在跑來跑去,有點傷眼睛
8:36 明明time complexity 都已經打出來了,為甚麼不把space complexity 也一併打出來呢?
13:42 剪接好像出了一點問題,這邊interviewee 重複講了structure 兩次
18:21 明明前面正確的講出了 null 的音,為何這時候又變成了台灣的版本呢?
20:51 剪接又出問題了,這邊又重複了一次,我還以為我中了伊邪那美
""
trie_node* children[26];
而不是 struct trie_node* children[26]
if(root->children[i] != nullptr
15:20 string 拼成sting
18:22 children 拼成chrildren,如果怕拼錯,可以寫child就好
拼錯很多字會讓人觀感不太好,覺得你可能英文不好(?,並且也沒有及時發現錯誤
19:30 感覺對自己的答案也沒有很肯定(有在被答案得感覺)
Helper函數那段我有點沒聽懂,包括index那一段為甚麼要設-1跟回傳值,覺得可以先介紹你這段程式碼要做甚麼再來寫程式,否則一邊寫又一邊講解,會讓人很Confuse你現在寫的東西到底是甚麼作用
24:05 interviewer在說明題目的時候沒有提到input跟output的格式,interviewee也沒有問,跟上面的討論一樣,直接以傳進TreeNode為假設去實作,並且res的部分也沒有提到如果今天沒有common prefix是要回傳null嗎,還是怎麼樣的
You may recall that an array arr is a mountain array if and only if:
arr.length >= 3
There exists some index i (0-indexed) with 0 < i < arr.length - 1 such that:
arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
Given an integer array arr, return the length of the longest subarray, which is a mountain. Return 0 if there is no mountain subarray.
A: 接下來來到我們的第二題,一開始會給你一個數列,請你找出一個數列滿足下列情形(如上)…那你要輸出子陣列的最長長度,這邊有兩個例子(如上)
B: 那在解這個題的時候,我會去計算現在上升和下降得長度,比如說(如下),我會分成兩個數列 up, down。一開始預設都是0,然後一開始up是0然後1因為比2小所以還是0,然後4比1大所以加一up這邊是1,然後7比4大…down(這邊相反逐字稿省略) ,最後答案就會是down+up+1的最大值
A: 可以請你把他實做出來嘛?
B: (如下)
A: 請你解釋一下這個演算法的時間複雜度和空間複雜度
B:
Time complexity O(n)
Space complexity O(n)
A: 那你可以想出一個方法讓他的空間複雜度為O(1)
B: 那這邊我會用另一個方法,因為我們在算這個答案的時候,一定是先往上在往下,因此我這邊的目標是先找出他的左山腳在找出他的右山腳,並且下一個山的左山腳會是前一個山的右山腳
A:
vector
按照上面的程式會回傳 4 但正確答案為 2。而且最後應該回傳
if (arr[r+1] > arr[r])
max(res, l-r+1)
這邊 l 應該會小於 r,所以長度計算就錯了,還有很多的問題你自己找吧,感覺這邊沒有用心做,我附上我的版本,這邊我儘量在不改變太多你的實作方法的情況下讓測資過。其中我假設 l, r 是包含在 mountain 的(所以我寫 max(res, r - l + 1
)Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.)
Example 1:
Input: head = [1,2,3,4]
Output: [2,1,4,3]
Example 2:
Input: head = []
Output: []
Example 3:
Input: head = [1]
Output: [1]