Try   HackMD

2023 年「資訊科技產業專案設計」作業 2

貢獻者: 貓貓-Haku

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

source - Rachel & Jun

模擬面試錄影(漢)

2605. 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的數字。那我開始寫程式碼。
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 要怎麼改?
  • 👨‍💻
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;
    }
}
  • 👨‍💼
    好的,沒有問題,今天的面試到此結束?

他評

吳倚攝

interviewer

  • 優點
  • 講話清楚

interviewee

  • 優點
  • 講解演算法清晰易懂
  • 可改進部分
  • 缺少REACTO中的repeat
  • word有自動大寫的問題,可以換其他文書軟體
  • 撰寫程式時可以多解釋程式內容
  • 1:20: 「用前面的元素把它蓋掉」應該是「用後面的元素把前面的蓋掉」
  • 1:55: character 發音不對

六六

Interviewer

  • 優點
  • 口齒清晰

Interviewee

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

朱舞花

Interviewer

  • 可改進部分
  • 18:09: 提到 star graph 可以講解 star graph 的定義

Interviewee

  • 優點
    • 口齒清晰,音量合適
  • 可改進部分
  • 17:16: 這邊有一段無聲的時間,檢查程式可以用舉例測試
  • 00:52: 講解解法可以多花一點時間,不用直接開始寫程式,這之後有很長一段的暫停,看起來就像沒想好。
  • 05:43: 沒解釋 pointer 怎麼在 array 中移動
  • 05:54: 能更詳細解釋為何有重複就一定有cycle

克勞迪

Interviewer

  • 優點
    • 08:09: 明確提到公司的需求

Interviewee

  • 優點
    • 08:46: 對於動態規劃的解釋非常清晰易懂
    • REACTO 中的 repeat 做得很好
    • 語速很快同時口齒清晰,可以很快的給出面試官要的資訊
  • 可改進部分
    • 04:14:打程式的過程可以講解一下,面試官不一定可以直接看懂
    • 02:56: 需要提供 TreeNode 的資料結構

迪奧

Interviewer

  • 優點
  • 英文講得很好
  • 可改進部分
  • 背景音樂會干擾聲音

Interviewee

  • 優點
  • 英文講得很好
  • 第三題跟面試官討論的部分很好
  • 可改進部分
  • repeat 問題的時候可以把問題打出來
  • 可以增加 REACTO 階段的 Testing

收穫

  • 自己的英文口說要加強
  • 不要有一段埋頭打程式的時間,可以說一點現在打的程式作用
  • 打程式前可以多更面試官討論解法
  • repeat 問題的時候把問題打出來
  • 用 ^ 在 array 的下一行代表pointer是個好方法

第四次作業-他人評論-01

Interviewer

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

Interviewee

  • 優點
  • 大部分都有邊coding邊講解
  • 12:10這裡面試者有因應面試官的問題改出來,並且還有再優化(int改成bool)
  • 3:55有點小murmur,但我覺得是好的,這個讓我感覺在快速檢查自己程式有沒有錯XD,順便讓自己想一下接下來的code
  • 可改進的地方
  • 整部影片的聲音都有點小聲

第四次作業-他人評論-02

  • Interviewer:
    • 優點:
      • 面試官此時說明題目,除了邏輯清楚、口齒清晰,也提供實際例子方便面試者理解題目的要求。
    • 缺點:
      • 此時直接使用 LeetCode 原題(LC2605),未做適度變形。例如,題目可以變為「公司尾牙舉辦抽獎活動,總共有兩個箱子,分別給男女員工投入自己的幸運號碼,最小的數字可以獲得特別獎…」。
      • 我認為從影片的一開頭其實interviwer的聲音顯得比較有氣無力,不是很能聽清楚想要表達什麼。
  • Interviewee:
    • 優點:
      • 面試者能夠迅速理解題目,並且想到一個「edge case」,此時若有兩個陣列共享一個數字,其輸出結果可能會是個位數。
      • 實作程式碼的過程中,同時向面試官口頭敘述自己思考的點。除了方便面試官理解,也避免實作過程中枯燥乏味。
      • 測試程式碼的過程中,面試者列出所有資料在不同時間點的演化過程,面試官此時一目瞭然。
    • 缺點:
      • 確認題意及特殊例子後,面試者此時最好等面試官給予意見反饋,始可開始實作程式。
      • 面試者打錯字,此時應該是 length 而非 lenght。
  • 其他意見:
    • 建議面試時使用 CodeShare 或其他 IDE 進行程式碼實作。