內容
- 項目
- 學過的專業課程
- 語言相關
- 網絡
- 算法
項目
我提到試驗室的一些測評項目,說到是涉密的之後,面試官就沒再問了。。。不過其實也沒有什麼技術含量。
課程
提到了數據結構、計算機網絡、OS、編譯原理、c++這些。
Q:常用的尋路算法?哈夫曼樹的原理以及應用?
A:答了dijkstra和prim算法,哈夫曼樹通俗的說了一下。
語言相關
因爲我比較熟悉c++,面試官本來想問Java問題的,也沒繼續問。。。
網絡
Q:http和https的區別?
A:只准備了TCP/IP那一套。。。沒想到問了http,說了https比http更安全。
算法
是一道LeetCode的經典接雨水題,20分鐘當場寫。做過比較久都忘了,只記得好像左右開始同時向中間遍歷,寫了一半發現答案不對,面試官給了思路每次找到左右最高柱小的那一個,然後計算當前柱子的雨水,我嘴欠說了一句這樣複雜度有點高。。。面試官說肯定可以再優化,先按這個思路寫。寫完之後討論了一下就結束了。
後來去LeetCode看到我以前的題解,emmm,思路是對的,當時就是先用數組保存了每個點左右的最大值,再進行遍歷。
參考代碼:
class Solution {
public:
int trap(vector<int>& height) {
if(height.size()==0)
return 0;
vector<int> highest_left(height.size());
highest_left[0] = 0;
vector<int> highest_right(height.size());
highest_right[highest_right.size() - 1] = 0;
int i = 1;
for (; i < highest_left.size() - 1; i++)
highest_left[i] = max(highest_left[i - 1], height[i - 1]);
for (i = highest_right.size() - 2; i >= 0; i--)
highest_right[i] = max(highest_right[i + 1], height[i + 1]);
int rain = 0;
for (i = 0; i < height.size() - 1; i++)
{
int lower = min(highest_left[i], highest_right[i]);
if (lower > height[i])
rain += lower - height[i];
}
return rain;
}
};