貢獻者: 努姓堅強-DogWangWang
模擬面試錄影: 1, 2, 3🐼:interviewer
🐶:interviewee
🐼:同學你好,我們今天有一個題目,我希望你能幫我把它完成,那第一題是Single Number,我會給你一個list,那這個list裡有兩兩相對的整數,但其中會有一個單獨存在的整數,那我希望你能幫我把這個單獨存在的整數找出來
🐶:所以我以一個例子來舉例,這個List應該是會長成[1, 2, 3, 4, 5, 4, 3, 2, 1],而其中4是單獨存在的整數
🐶:那我想我會先把這個list的長度先抓出來,然後去輪巡這個list,並把他加入一個新的list裡,並去常看這個list的長度,當list的長度只有1時,代表這個值就是單獨存在的整數
🐼:好,我這裡有發現一個嚴重的問題,你用for歷遍了整個list,然後又再裡面包了一層for,當今天這個list裡有上萬,甚至更多的整數時,運算時間是否會花太長
🐼:我們換個思路,因為這個題目是在list中,除了一個整數只出現一次以外,其餘每個整數都出現兩次,所以你是不是有機會讓其倆倆互相抵銷呢
🐶:兩個互相抵銷…,好,我想我有一點想法了,那我是不是可以用set讓這個list變成不包含重複元素的無序集合,並把這個不重複的list加總起來*2之後,減去原先的list那我就會得到單獨存在的整數了
🐼:好,這位同學你這個方法也可以,但其實這個題目我們是想使用XOR來解決,XOR 的一個重要特性是:a XOR a = 0 和 a XOR 0 = a
這意味著如果你將所有數字進行 XOR 運算,出現兩次的數字會互相抵消變成 0,最後只會剩下那個出現一次的數字,那如果使用XOR來解決的話,你會怎麼處理
🐶:如果使用XOR來解決的話,我想我應該會這麼做
🐼:OK, this is other question, Two out of Three, this question will give you three integer arrays nums1, nums2, nums3 and you need return at least two out of the three arrays. You may return the values in any order.
🐼:You can look example, nums1 = [1,1,3,2], nums2 = [2,3], nums3 = [3], [3,2] are present in at least two arrays
🐶:OK, I think I will use for to see nums1 values, if value is in nums2 or nums3, and I can make new list to append this value
🐶:Same as nums2, I can look if nums2 values is in nums3, I append it to list too, but this list may have repeat values, so I use set to that values to be only one
🐼:I think this question is very easy, but the code will be difficult to read if you write it like this, because you use too many same code in the answer, this is not friendly, so I want you can clean your code become more concise
🐶:OK, if I want clean my code, and I would change like this
🐼:好,那我們來完成最後一個題目,這個題目我會給你一個list,這list裡可能會有許多整數,那我希望你用這個list裡的整數去做排列組合,並且把所有有可能的排列組合都列出來
🐶:那我們一開始的話用[1,2,3]去做一個範例,當[1,2,3]→[1,3,2]之後,我希望把[1,3,2]變回[1,2,3],接著再去做另一種排列組合[1,2,3]→[2,1,3]→[2,3,1]
🐶:那因為我們需要回朔成原本的狀態,且如果我們用len(nums)作範圍,nums[i], nums[i+1]做交換,最後的nums[i+1]就會造成溢出,所以必須再寫一個嵌套函數並初始化變數start=0,這樣才能達成我們的需求,並且nums[i], nums[i+1]交換完成儲存後,必須把nums[i], nums[i+1]再交換一次,以回到初始狀態
🐶:
所以當start= 0, i= 0, [1,2,3]將不動
並且backtrack(start + 1)
start=1 ,i 將有兩個可能性 1 or 2
start=1 ,i=2 時 [1,2,3]→[1,3,2]
並把[1,3,2]儲存起來
到了後面那一行的nums[start], nums[i] = nums[i], nums[start]
start=1, i=2, 會再把[1,3,2]交換回來, 回朔成原本list的樣子
[1,3,2]→[1,2,3]
1.影片中語法格式直接打錯,宣告function時,明明是用python,卻多加了大括號
2.避免思考過程停頓過久
3.要確定把所有解法細節想仔細再開始動手寫,缺乏REACTO裡的R
4.沒有對時間複雜度和空間複雜度做討論
1.等到interviewer確實了解你的方法,在開始進行coding
2.應該跟interviewer有更多的互動
3.英文口說極差需加強,會忽然想不到詞彙,然後就停頓了
4.不要有太多的不肯定句
5.少用助語詞