華爲 2020暑期實習 面試回憶

內容

  • 項目
  • 學過的專業課程
  • 語言相關
  • 網絡
  • 算法

項目

我提到試驗室的一些測評項目,說到是涉密的之後,面試官就沒再問了。。。不過其實也沒有什麼技術含量。

課程

提到了數據結構、計算機網絡、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;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章