無逸煩-Kris - Homework 2

互評

旗忠一仁-someone

64. Add Binary

  • 可以在每段程式碼前加註解,像27-29行為初始化,可以加註
  • 當下沒有解釋C2D實作
  • 9:08 解釋要怎麼解決頭是0的情況有點不清楚,重複聽才懂,寫法有點不直觀的感覺
  • 9:57 感覺一開始有點沒回答到interviewer的問題,我在聽的時候就一直在等interviewee解釋他的C2D,但沒有很快地給出答案
  • 11:30 這段時間滑鼠一直動跟一直移動輸入的地方,會躁起來
  • 11:30 迴圈的解釋我覺得沒解釋到甚麼,有點不知道在說甚麼的感覺,可以舉個例子更好
  • 12:34 解釋ASCII code我覺得不需要,主考官應該都會知道這些東西
  • 13:00 為了給更多解法結果自己卡了,有點太多
  • 14:20 interviwer說會因為%跟/影響效率,我覺得有點誇張,我沒遇過改進效率是要把除法跟取餘數改成Binary的形式,轉問題的方式我覺得太硬,聽起來很怪,並且interviewee就突然打開畫圖軟件來解釋全加器,有點怪
  • code會讓人有背答案的感覺

141. Linked List Cycle

  • 講話聲音被鍵盤聲蓋掉很多,加上有口音,沒辦法很好好地聽interviewee說甚麼
  • 覺得一開始提出的修改Node的方法可以不用講,因為用這種方法就有點像是你自己修改題目,而不是去想解決方法

達摩-Daruma

Circular Permutation in Binary Representation

Interviewer

0:00 可以再跟面試者閒聊一下,讓彼此更多互動

Interviewee

8:15 沒有解釋為甚麼%2的n次方

程式碼的部分會讓人看得很亂,因為把次方都寫成1>>n跟2>>n

我覺得可以在for迴圈中間宣告像是

unsigned int len = 1 << i; //2 << i 就是 2*len

會讓程式碼可讀性更高,加上for迴圈變成兩半,看得不太舒服

9:47 在講解直接找到開頭就是start的解的部分,我第一次聽的時候沒聽懂,可能是我理解力差,但是我覺得跳過太多東西了,包括怎麼會有這個想法,以及透過檢查start的2^i的bit去決定前半後半,來讓開頭是start,兩個聽起來就會很跳,沒有解釋為甚麼這樣做,start就會是開頭,只是把解法講出來而已

Swap Nodes in Pairs

聲音很炸

Interviewer

14:13 問的問題我覺得有點怪,因為p不管指向哪個我覺得差異只是實作方式,即使用兩個指標去操作我覺得問題也不大

17:57 我覺得問題有點沒有必要,因為說node更改會增加記憶體空間,但整個code也只有用到2個node,如果要改進的話,挑這個地方我覺得有更好的選擇,但在看完後面後,才了解到因為是遞迴會用到很大量的空間,這時候我覺得才會是合理的修改

Interviewee

在Follow up的部分,我是聽了下面的YT連結才了解

https://youtu.be/1UOPsfP85V4

我覺得解釋部分可以再加強,包括畫圖的部分,在解釋想法時,圖上已經有之前畫過的線,變成你講的跟圖上的不一樣,看的就不是很明白,以及為甚麼要用遞迴,遞迴的作用是甚麼,我覺得都沒有很清楚的解釋到

蛋花湯-Egg

  • 9:50 Interviewer在講解新功能時,因為圖跟假設的不一樣,很容易會搞混,可以再手畫一張新的圖來說明
  • 15:12 先解釋了Preorder且BST可建構唯一樹,讚讚
  • 23:39 第二題的程式部分,用begin, end來取代min, max我覺得可以更好的表達意思
  • 30:54 寫完程式有做到自己Trace程式檢查錯誤,我覺得很棒
  • 34:10 一開始沒有發現min > max的問題,並在trace過程中發現,可以讓面試者知道你有Debug的能力,我覺得是很好的展現
  • Index = 0的部分,我覺得改成加在build內
TreeNode* build(vector<int>& preorder, int index, int min, int max)

並在bstFromPreorder填入0會比較好

TreeNode* bstFromPreorder(vector<int>& preorder) {
    return build(preorder, 0, 0, preorder.size()-1);
}

因為這樣就把index給包進這個function,而不用去宣告一個全域變數,我覺得會是比較好的寫法

畝畸陡-Ivan

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嗎,還是怎麼樣的

檢討中學習到的

程式碼的說明不完全,真的會讓人很痛苦

在這幾名同學中,我有遇到幾個程式碼寫完,聽他解釋完,但還是很難理解他在做甚麼,我就得還要去查相關的題目,自己算一遍,等自己懂了再回去看,會發現同學的講解跳過了很多步驟,像是可能使用了遞迴,但沒有跟你說使用的原因,要用在哪,如何作用,你就會聽得霧煞煞,所以自己也要避免這種會自己省略一些步驟的講解方法,講解應該要是清楚,淺顯易懂的

有背答案跟沒背答案真的很明顯

其實從寫程式中就可以看到一個人是不是在背答案,像是可以很順的寫完整串判斷式,邊界甚麼的都一氣呵成就寫好,或是用一些很簡略的寫法,都會讓人感覺在背答案,觀感就會不好,所以還是要注意一下

再又錄完一次之後

我發現這種習慣真的很難短時間改變,我看了老師檢討,以及同學們的檢討,但真的下去寫,又會忘記要記得寫註解,講到一半發現自己的滑鼠又再亂晃,所以可能要通過更多的練習,或是寫個小抄來提醒自己不要犯那些不該做的事情