华为 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;
	}
};
发布了26 篇原创文章 · 获赞 16 · 访问量 5853

猜你喜欢

转载自blog.csdn.net/weixin_44826484/article/details/105610450