## 資訊產業專案設計 Homework2 >作者 : 風清揚-Wind [模擬面試影片](https://youtu.be/46trI55O8Ac?si=0zemmF_Shvloc1hr) ## [1. Two Sum](https://leetcode.com/problems/two-sum/) ### 題目描述 #### 原題描述 給一個整數陣列 $nums$ ,和一個整數 $target$ ,傳回2個數字的 $index$ ,使得他們相加等於 $target$ 。 #### 修改後 現在我這裡有數個寬度相同,長度不一致的物品。請幫我挑出2個物品,讓他們能夠剛好放入箱子裡面。 ### 程式碼說明 #### 初始方法 初步想法為兩個for迴圈來去查找有無相應的值,相加等於 $target$ 。初始 $i$ 等於 $0$, $j$ 等於 $i+1$ 。後面當 $j$ 找到 $nums[i]+nums[j] = target$ 跳出迴圈,若沒有就 $j++$。 **時間複雜度為 $O(n^2)$** ```c int* twoSum(int* nums, int numsSize, int target, int* returnSize){ int*ans=(int*)malloc(2*sizeof(int)); for(int i=0;i<numsSize;i++){ for(int j=i+1;j<numsSize;j++){ if(nums[i]+nums[j]==target){ ans[0]=i; ans[1]=j; break; } } } *returnSize=2; return ans; } ``` #### 改善方法 為了改善查找時間,可以建立map,key值為我們的 $nums[i]$,value為 $i$。查找 $target-nums[i]$ 有沒有在map裡面,若有,代表這兩個值可以組合成 $target$ ,回傳這兩個數值的index值即可。若沒有的話,將 $nums[i]$ 跟 $i$ 加入map。 **時間複雜度為 $O(n)$** ```cpp class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> map; for(int i=0;i<nums.size();i++){ int compare=target-nums[i]; //查找key值是否存在 if (map.count(compare)){ return {map[compare], i}; } map[nums[i]] = i; } return {}; } }; ``` ## 簡介對他人的評論 ## 他評-01 ### interviewer #### 可改進之處 1. [10:33](https://youtu.be/e0xsQr8mT3s?t=633) 可以讓interviewee完成這個方法之後,再進行詢問 ### interviewee #### 優點 1. [0:47](https://youtu.be/p5--6z5rnvo?t=47) 有主動分析時間複雜度 #### 可改進之處 1. [9:03](https://youtu.be/e0xsQr8mT3s?t=543) 盡量避免上下捲動 ## 他評-02 ### interviewer #### 可改進之處 - [0:28](https://youtu.be/uiTcoU3Ksns?t=28) 題目說明過於詳細 ### interviewee #### 優點 - [3:01](https://youtu.be/iC9Obe5UjUc?t=181) 在撰寫程式碼時,有說明這個程式碼的意義 #### 可改進之處 - 在程式碼完成之後,可以用先前舉的例子來驗證(Test) ## 他評-03 ### interviewer #### 可改進之處 - [3:56](https://youtu.be/wgwVsviTdcI?t=236) 有沒有速度更快的方法這裡,可以說明要朝著哪個方向改進 - [8:44](https://youtu.be/wgwVsviTdcI?t=524) 可以改成能不能用python語法來達到先前程式碼的效果 ### interviewee #### 優點 - [0:53](https://youtu.be/wgwVsviTdcI?t=53) 那個思考的眼神相當到位 - 在撰寫程式碼時,有說明這段程式的用途 #### 可改進之處 - [0:31](https://youtu.be/wgwVsviTdcI?t=31) 在說明例子時,可以配合圖解來說明,會比較清楚 ## 他評-04 ### interviewer #### 優點 - [7:50](https://youtu.be/TucMgeVZzOo?t=470)有引導interviewee往特定方想思考 ### interviewee #### 優點 - 程式碼說明很清楚,有條理的敘述這段程式的作用 #### 可改進之處 - 在coding時,可以將題目寫成function,main只做呼叫及測試 ## 他評-05 ### interviewer #### 可改進之處 - [6:48](https://youtu.be/U1ojxdzmT9w?t=408) 在改進方法這邊,時間複雜度也是$O(n^2)$ ,在提問時可以明確指出要降低時間複雜度 ### interviewee #### 優點 - [1:48](https://youtu.be/U1ojxdzmT9w?t=108) 有用肢體語言輔助表達 - [4:26](https://youtu.be/q3-dDTSpM6I?t=266) 詳細描述程式碼 #### 可改進之處 - [1:48](https://youtu.be/U1ojxdzmT9w?t=108) 在說明approach時,如果可以初步給一個程式框架,能讓interviewer更容易理解 - 可以在程式實作完成之後,用先前example時所舉的例子做test ## 他評-06 ### interviewer #### 可改進之處 - [5:41](https://www.youtube.com/watch?v=46trI55O8Ac&t=5m41s) interviewer在此處除了直接告訴interviewee時間複雜度,可以用問問題的方式了解interviewee是否了解時間複雜度的計算。 ### interviewee #### 優點 - [4:19](https://www.youtube.com/watch?v=46trI55O8Ac&t=4m19s) 在寫程式的同時也有口頭說明,讓整個過程幾乎沒有雙方都沉默的空檔。 #### 可改進之處 - [5:29](https://www.youtube.com/watch?v=46trI55O8Ac&t=5m29s) 在coding完成後,可以使用前面舉的例子帶入程式碼中做測試。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up