---
# System prepended metadata

title: '2023 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2023)」作業 2'

---

# 2023 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2023)」作業 2
> 貢獻者: 貓貓-Haku
> ![](https://hackmd.io/_uploads/S1HnEZLJa.jpg =50%x)
> source - [Rachel & Jun](https://twitter.com/RachelAndJun/media)

> [模擬面試錄影(漢)](https://youtu.be/9iOsBNedu8s)


## [2605. Form Smallest Number From Two Digit Arrays](https://leetcode.com/problems/form-smallest-number-from-two-digit-arrays/)
### 面試過程
* 👨‍💼 是 interviewer
* 👨‍💻 是 interviewee
* 👨‍💼
你好我是負責本次面試的人員。
如果沒有什麼問題，我們就直接開始今天的面試吧。
* 👨‍💻 
我沒有任何問題，隨時都能開始。
* 👨‍💼 
那麼首先想請問您一個問題，給定兩個非空陣列 nums1, nums2,裡面含有unique digits,1~9，請你找出最小的數字，兩個陣列都需要至少一個digit出現在這個數字中。這裡有個例子
nums1 = [4,1,3], nums2 = [5,7]
答案是15，1出現在nums1，5出現在nums2，並且這是最小的數字。
* 👨‍💻 
好的，所以我會有兩個非空陣列 nums1, nums2，然後要找出一個最小數字，那假設
nums1 = [1,2,3], nums2 = [2,3,4]
答案是2，因為2同時出現在兩個 array 中，並且這是最小的數字，這樣對嗎?
* 👨‍💼
對
* 👨‍💻 
那我想法是，首先走過一遍兩個 array，紀錄出現的 digit，如果有 digit 同時出現，那就回傳最小的同時出現 digit ，如果沒有就回傳nums1最小 digit 結合 nums2 最小 digit的數字。那我開始寫程式碼。
```java
class Solution {
    public int minNumber(int[] nums1, int[] nums2) {
        int[] count=new int[10];
        int min1=9,min2=9;
        for(int i=0;i<nums1.length;i++){
            min1=Math.min(min1,nums1[i]);
            count[nums1[i]]++;
        }
        for(int i=0;i<nums2.length;i++){
            min2=Math.min(min2,nums2[i]);
            count[nums2[i]]++;
        }
        for(int i=1;i<10;i++){
            if(count[i]>=2){
                return i;
            }
        }
        return min1>min2?min2*10+min1:min1*10+min2;
    }
}
```
* 👨‍💻 
時間複雜度是 O(n), n = max(nums1.length, nums2.length)
空間複雜度是 O(1), count digit 只會有1~9，不會隨n變大
我們以這個範例測試
nums1 = [4,1,3], nums2 = [5,7] ans = 15
[0,0,0,0,0,0,0,0,0,0], min1 = 9, min2 = 9
[0,0,0,0,1,0,0,0,0,0], min1 = 4, min2 = 9
[0,1,0,0,1,0,0,0,0,0], min1 = 1, min2 = 9
[0,1,0,1,1,0,0,0,0,0], min1 = 1, min2 = 9
[0,1,0,1,1,1,0,0,0,0], min1 = 1, min2 = 5
[0,1,0,1,1,1,0,1,0,0], min1 = 1, min2 = 5
* 👨‍💼
好的，你做得很好，那如果不保證 digit 是 unique 要怎麼改?
* 👨‍💻
```java
class Solution {
    public int minNumber(int[] nums1, int[] nums2) {
        boolean[] count1=new boolean[10];
        boolean[] count2=new boolean[10];
        int min1=9,min2=9;
        for(int i=0;i<nums1.length;i++){
            min1=Math.min(min1,nums1[i]);
            count1[nums1[i]]=true;
        }
        for(int i=0;i<nums2.length;i++){
            min2=Math.min(min2,nums2[i]);
            count2[nums2[i]]=true;
        }
        for(int i=1;i<10;i++){
            if(count1[i]&&count2[i]){
                return i;
            }
        }
        return min1>min2?min2*10+min1:min1*10+min2;
    }
}
```
* 👨‍💼
好的，沒有問題，今天的面試到此結束?

## 他評


### [吳倚攝](https://hackmd.io/@sysprog/ryYse8pJp)
#### interviewer
- [ ] 優點
* 講話清楚

#### interviewee
- [ ] 優點
* 講解演算法清晰易懂

- [ ] 可改進部分
* 缺少REACTO中的repeat
* word有自動大寫的問題，可以換其他文書軟體
* 撰寫程式時可以多解釋程式內容
* [1:20](https://youtu.be/wJSxcNzuIig?t=80): 「用前面的元素把它蓋掉」應該是「用後面的元素把前面的蓋掉」
* [1:55](https://youtu.be/JW3YP17EPEY?t=114): character 發音不對

### [六六](https://hackmd.io/@sysprog/SJtyg_6yT)
#### Interviewer
- [ ] 優點
* 口齒清晰

#### Interviewee
- [ ] 優點
* 英文講得很好
* 打字速度很快，排版整齊
* 對問題的提問很全面
* 寫程式時會一邊寫一邊解釋程式，很棒
* 第一題 two pointer 講解很清楚，用 ^ 在 array 的下一行代表pointer是個好方法
* 第三題寫程式前先用註解寫大綱很清楚的表達了程式內容


### [朱舞花](https://hackmd.io/@sysprog/ByN0NI8kp)
#### Interviewer
- [ ] 可改進部分
* [18:09](https://youtu.be/q4tgMoBPUlU?t=1089): 提到 star graph 可以講解 star graph 的定義

#### Interviewee
- [ ] 優點
    * 口齒清晰，音量合適
- [ ] 可改進部分
* [17:16](https://youtu.be/q4tgMoBPUlU?t=1036): 這邊有一段無聲的時間，檢查程式可以用舉例測試
* [00:52](https://youtu.be/QjGs9ktjIfw?t=52): 講解解法可以多花一點時間，不用直接開始寫程式，這之後有很長一段的暫停，看起來就像沒想好。
* [05:43](https://youtu.be/QjGs9ktjIfw?t=343): 沒解釋 pointer 怎麼在 array 中移動
* [05:54](https://youtu.be/QjGs9ktjIfw?t=354): 能更詳細解釋為何有重複就一定有cycle



### [克勞迪](https://hackmd.io/@sysprog/H1hglOTy6)
#### Interviewer
- [ ] 優點
    * [08:09](https://youtu.be/N4eiA2HKRUc?t=489): 明確提到公司的需求
#### Interviewee
- [ ] 優點
    * [08:46](https://youtu.be/N4eiA2HKRUc?t=526): 對於動態規劃的解釋非常清晰易懂
    * REACTO 中的 repeat 做得很好
    * 語速很快同時口齒清晰，可以很快的給出面試官要的資訊
- [ ] 可改進部分
    * [04:14](https://youtu.be/N4eiA2HKRUc?t=254):打程式的過程可以講解一下，面試官不一定可以直接看懂
    *  [02:56](https://youtu.be/icIoCbfhwb8?t=176): 需要提供 TreeNode 的資料結構


### [迪奧](https://hackmd.io/Kk7HTlbNQj2jlCU93aspdA)
#### Interviewer
- [ ] 優點
* 英文講得很好

- [ ] 可改進部分
* 背景音樂會干擾聲音

#### Interviewee
- [ ] 優點
* 英文講得很好
* 第三題跟面試官討論的部分很好

- [ ] 可改進部分
* repeat 問題的時候可以把問題打出來
* 可以增加 REACTO 階段的 Testing

## 收穫
* 自己的英文口說要加強
* 不要有一段埋頭打程式的時間，可以說一點現在打的程式作用
* 打程式前可以多更面試官討論解法
* repeat 問題的時候把問題打出來
* 用 ^ 在 array 的下一行代表pointer是個好方法
---
## 第四次作業-他人評論-01
### Interviewer
- [ ] 優點
* 他是面試官

- [ ] 可改進的地方
* 整部影片的聲音都有點小聲
* 影片前半在講解題目的那邊互動偏少，只有講解題目
* 給題目的時候可以試著包裝題目而不是直接給題目，例如 : 公司會用陣列去儲存員工偷懶時數等等

### Interviewee
- [ ] 優點
* 大部分都有邊coding邊講解
* [12:10](https://youtu.be/9iOsBNedu8s?si=OroZdqnpGwopR4YU&t=730)這裡面試者有因應面試官的問題改出來，並且還有再優化(int改成bool)
* [3:55](https://youtu.be/9iOsBNedu8s?si=DYZ4e7tNLiDgT2vc&t=236)有點小murmur，但我覺得是好的，這個讓我感覺在快速檢查自己程式有沒有錯XD，順便讓自己想一下接下來的code
- [ ] 可改進的地方
* 整部影片的聲音都有點小聲
## 第四次作業-他人評論-02
- Interviewer：
    - 優點：
        - 面試官[此時](https://youtu.be/9iOsBNedu8s?t=29)說明題目，除了邏輯清楚、口齒清晰，也提供實際例子方便面試者理解題目的要求。
    - 缺點：
        - [此時](https://www.youtube.com/watch?v=9iOsBNedu8s)直接使用 LeetCode 原題（[LC2605](https://leetcode.com/problems/form-smallest-number-from-two-digit-arrays/)），未做適度變形。例如，題目可以變為「公司尾牙舉辦抽獎活動，總共有兩個箱子，分別給男女員工投入自己的幸運號碼，最小的數字可以獲得特別獎…」。
        - 我認為從影片的一開頭其實interviwer的聲音顯得比較有氣無力，不是很能聽清楚想要表達什麼。
- Interviewee：
    - 優點：
        - 面試者能夠迅速理解題目，並且想到一個「edge case」，[此時](https://youtu.be/9iOsBNedu8s?t=76)若有兩個陣列共享一個數字，其輸出結果可能會是個位數。
        - 實作程式碼的過程中，[同時](https://youtu.be/9iOsBNedu8s?t=155)向面試官口頭敘述自己思考的點。除了方便面試官理解，也避免實作過程中枯燥乏味。
        - 測試程式碼的過程中，面試者列出所有資料在不同時間點的演化過程，面試官[此時](https://youtu.be/9iOsBNedu8s?t=416)一目瞭然。
    - 缺點：
        - 確認題意及特殊例子後，面試者[此時](https://youtu.be/9iOsBNedu8s?t=142)最好等面試官給予意見反饋，始可開始實作程式。
        - 面試者打錯字，[此時](https://youtu.be/9iOsBNedu8s?t=590)應該是 length 而非 lenght。
- 其他意見：
    - 建議面試時使用 [CodeShare](https://codeshare.io/) 或其他 IDE 進行程式碼實作。
---