---
# System prepended metadata

title: '2023 年「資訊科技產業專案設計」hw 2:'

---

> https://hackmd.io/@sysprog/ryl9ClupJ6
> 他評01-
> 正面:英文咬字清楚
> 反面:REATCO的部分可以做得更好，然後少了中文兩部影片...
> 
> https://hackmd.io/DD_kC-4CSB2gXQVpIjG9OA?both
> 他評02-
> 正面:REATCO的部分基本都要做到
> 反面:interviewee陳述自己的方法可以舉例說明為何可行
>     interviewer可以通過問答去延伸問題  例如map是用什麼實做
> 
> https://hackmd.io/dd1z3Jw7S9CnGQO0jFKPGw?both
> 他評01-
> 正面:REATCO都有做到，而且打CODE的時候都詳細說明
> 反面:題目缺少了點包裝，除此之外沒什麼太大問題?!
> https://hackmd.io/XianyRqySdSMQ_DWcW2QSA?both
> 他評01-
> 反面:缺少了test階段，interviewer都是看他打完code直接說great，沒考慮正確性問題
> 也沒有針對問題去做延伸
> 正面:interviewee的repeat和example有做到
> https://hackmd.io/uFnRXNBuTzGMO9L0gj0pwA?both
> 他評01-
> 反面:interviewee打完code後，都缺少了主動跑test case去說服正確性 打字速度太慢
> 需要練習邊打code邊解釋會更好  

# 2023 年「資訊科技產業專案設計」hw 2:
貢獻者:姆咪-MUMI

## **OVERVIEW 對他人的評論(簡略):**
### 針對interviewer的評論:
- 優點:
1. 題目說明非常明瞭。
2. 很好的面試開頭。

- 可改進之處:
1. 與interviewee的互動少
2. 題目稍微包裝一下會更好。
3. 問題單純只問時間以及空間複雜度略顯單薄，可以在interviewee回答的基礎上，去進行延伸的討論，例如討論資料結構 特性等...



### 針對interviewee的評論:
- 優點:
1. 講解仔細
2. 說話流暢

- 可改進之處:
1. 缺REACTO步驟
2. 如果邊打code邊解釋會更好
3. 沒有詳細解釋時間複雜度或空間複雜度，只是純粹說 多少多少


## 經過HW1以及HW2他評後學習到了什麼?
評論別人找尋其他人的缺點以及優點時，看到一些同學真的很秀，沒想到還有這種操作:同時也是在檢視自己哪裡做會更好，看看同學有沒有注意到我哪些部份可以做得更好，順便多看看leetcode的題目(因為之前沒有刷題的經驗)。其中：

### 許多人沒做到（有人有做到）而我也沒做到的地方

- 題目的包裝
- 少了repeat和examples 沒仔細確認題意
- 英文發音像是在棒讀，硬要抑揚頓挫，結果就是很怪==
- 要主動跑test case 說服程式的可執行性


### 自己覺得自己做的還不錯的地方
- 有畫圖來輔助想法
- 程式講解仔細
- 有說明為什麼改善的原因


---
## [LEETCODE影片](https://youtu.be/wZHPKnOQ6Nw):[21.Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/)
> 🧔：interviewer 👶：interviewee
##  **面試過程**
**Repeat&Example**
🧔：感謝你的時間，接下來由我主持這場面試，若過程中有任何疑問都歡迎提出來。首先我們公司有一部分是在做雲端業務服務，有時候客戶會需要將好幾個資料夾的檔案給整理成一個，那客戶會希望他資料夾裡面的檔案依然是保持他的順序。
那假設今天有兩個資料結檔案是按照他的字母順序去排序的，那合併之後一樣是保持著按照字母順序排序
👶：所以，我們今天的目標是把兩個資料夾檔案合併再一起，一樣是保持他的順序嗎?
🧔：是的，沒錯 
👶：那我可以來舉例一下，來確認一下對於題目的理解嗎?
🧔：好的
👶：如果今天有兩個資料夾裡面分別有ABC和DEF這三個檔案，那這兩個資料夾合併之後會是ABCDEF這樣順序嗎?
🧔：是的
👶：那如果今天有兩個資料夾裡面分別有ACD和BEF這三個檔案，那這兩個資料夾合併之後依然會是ABCDEF這樣順序嗎?
🧔：是的
**Approach**
👶：那麼我可以提出我的解決方案，我會把這個問題轉化成有兩個array，分別裝著ACD、BEF，接著將這兩個array合併成一個變成ABCDEF。
👶：我直覺上我會使用遞迴的方法，名叫**merge的遞迴**。首先要考慮a,b這兩個array，其中一個為空的狀況，a為空則輸出b，反之亦然；接著要去做比較這兩個array第一個檔案的檔名，由於兩個資料夾已經按照順序排序好了，所以可以直接做比較，然後去比較字母的ascii大小，先輸出較小的那個，而剩下的繼續帶入遞迴去做比較。
補充說明:[ascii碼](https://zh.wikipedia.org/zh-tw/ASCII)
🧔：聽起來還不錯，你可以開始實作你的想法
👶：我打算用c++來實作，請問可以使用STL嗎?
🧔：沒問題
```
struct ListNode {
    int val;
    ListNode *next;
};
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        // If one of the list is emptry, return the other one.
       if(!l1) return l2;
        else if(!l2) return l1;

        // The smaller one becomes the head.
        if(list1->val < list2->val) {
            list1->next = mergeTwoLists(list1->next, list2);
            return list1;
        } else {
            list2->next = mergeTwoLists(list1, list2->next);
            return list2;
        }
    }
};

```
**TEST & Optimization:**
👶：就像我剛剛說的，有兩個array分別裝著ACD、BEF，因為A<B麻，所以會執行 **if(list1->val < list2->val)**，會先return A，然後剩下的放入遞迴繼續執行;接下來B比較小，會去執行else return B 和前面做差不多的行為，依此類推。
🧔：可以請你分析一下這段程式碼的時間/空間複雜度嗎?
👶：時間複雜度:O(A資料夾的檔案大小+b資料夾的檔案大小) 空間複雜度也是，因為要去call recursive fuction
🧔：可是有時候有些客戶一個資料夾會裝太多檔案，會需要這麼多的記憶體空間，可能會發生stack overflow。那有沒有辦法調整去預防這種問題呢?
👶：這可以通過跌代的方法來處理，因為不用call recursive function
🧔：請嘗試看看實作你的想法
```
struct ListNode {
    int val;
    ListNode *next;
};

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {

        ListNode dummy(0);
        ListNode* tail=&dummy;
        while(list1 && list2) {
            if(list1->val < list2->val) {
                tail->next=list1;
                list1=list1->next;
            }else{
                tail->next=list2;
                list2=list2->next;
            }
            tail=tail->next;
        }
        
        if(list1) tail->next = list1;
        if(list2) tail->next = list2;
        
        return dummy.next;
    }
};

```
👶：雖然這麼更改，不會執行的比較快，但是他的空間複雜度卻能降低到O(1)
🧔：好的，感謝你這次的面試，如果有後續的消息會再通知你的


## 第四次作業-他評01
### 關於 interviewer
- [ ] 優點
- [9:27](https://youtu.be/wZHPKnOQ6Nw?t=567)針對複雜度的問題延伸問題。
- [ ] 可改進的地方
- [3:41](https://youtu.be/wZHPKnOQ6Nw?t=221)應該是回答"可不可以"而不是"好的"。

### 關於 interviewee
- [ ] 優點
- [5:36](https://youtu.be/wZHPKnOQ6Nw?t=336)解釋比較的邏輯清楚，但可以在旁邊打上註解方便之後test說明。

- [ ] 可改進的地方
- [2:39](https://youtu.be/wZHPKnOQ6Nw?t=159)approach時還是用打字的比較好閱讀，拿滑鼠寫字有點難閱讀，且速度也慢。
- [8:08](https://youtu.be/wZHPKnOQ6Nw?t=488)畫面拉太小。