---
# System prepended metadata

title: Untitled

---

## 資訊產業專案設計 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完成後，可以使用前面舉的例子帶入程式碼中做測試。


