2019腾讯实习笔试题部分记录+两次电话面试笔记

第一题:有n层的一座塔,跳塔

有n层的一座塔,每层高度不一样,现在小Q去爬塔,有如下特性:他爬塔的速度恒定,也就是说爬每一层的用时和这一层的高度成正比。但是他有一个能力:他可以有一种魔法,这个魔法可以跳过一层或者两层塔,但是每跳跃一次,都要停下来爬至少一层才能继续跳跃。需要你规划出一条方案,让他能够最短的时间爬到塔顶(最后如果跳跃,可以选择越过塔顶,也就是说如果最后倒数第二层是走完的,直接跳到顶就完事了)
输入:两行数据,第一行:塔层数;第二行,每层高度,用空格隔开。如:
4
2 5 2 6
输出:总计用时
思路:最优路径问题一直是个难题,拿到题的第一反应就是用递归或者Huffman树的思路求解。贪心法是不合适的,因为贪心法不能保证最优解。想到了一种暴力测试的方法:根据每层的顺序构造二叉树,每层都可以选择跳或者不跳,分别对应左右子树。最终得到层数为n的满二叉树。从顶到底的搜索过程对应着一条路径,这个满二叉树不是所有分支都是合题意的,所以根据规则:连续跳跃的层数不得超过2,也就是连续两层的跳跃可以看做一次跳跃。这样就可以砍掉一些分支。然后遍历一遍从根节点到叶子结点,每次遍历都是一个方案路径的实现,这样就穷举出来了所有的可能方案,遍历过程计算“爬”的长度。
PS:第一阶段构造树、第二阶段砍掉不必要分支、第三阶段遍历计算、最后查找最小值。后续可以把构造树和砍掉分支的操作合并到一起去,可以提高算法运行效率。想到解法的时候没时间了,算了放弃。后续有空写出来(但是应该是没空)

第二题:没看懂题,就是黑白格数格子,忘了

第三题:约瑟夫环

小Q有n张牌,分别是1~n;现在要把第一张牌放到最底下然后再把顶层的牌拿开,直到只剩一张。求拿开牌的顺序。
(我基本没做过什么笔试面试题,凑巧我知道这个题)

int main(int argc, _TCHAR* argv[])
{
	int num  = 0;
	cin >> num;
	queue<int> q;
	vector<int> out;
	for (int i = 0; i < num; i++) {
		q.push(i+1);
	}
	while (q.size() > 1) {
		out.push_back(q.front());
		q.pop();
		if (q.size() != 1) 
		{
			q.push(q.front());
			q.pop();
		} else {
			break;
		}
		
	}
	out.push_back(q.front());
	for (int i = 0; i < out.size(); i++) {
		printf("%d ", out[i]);
	}
	return 0;
}

第三题:2019年3月19日08:56:15干活了,题目描述以后再写,看下面就知道要做什么了

void answer(vector<vector<int>> vec, int num_i, int min_, int& ans, int& idx) {
	ans = min_;
	for (int i = 0; i < num_i; i++) {
		for (int j = 0; j < num_i; j++) {
			if (vec[i][j] < ans && vec[i][j] >= 0) {
				ans = vec[i][j];
				idx = i;
			}
		}
	}
}
int main() {
	int n;
	double num;
	vector<vector<int>> vec;
	cin >> n;
	vector<int> nums;
	for (int i = 0; i < n; i++) {
		double num;
		cin >> num;
		nums.push_back(num);
	}
	for (int i = 0; i < n; i++) {
		vector<int> sub;
		for (int j = 0; j < n; j++) {
			sub.push_back(-1);
		}
		vec.push_back(sub);
	}

	for (int i = 0; i < vec.size(); i++) {
		for (int j = i+1; j < n; j++) {
			vec[i][j] = abs(nums[i] - nums[j]);
		}
	}

	int min_ = -1;
	for (int i = 0; i < n; i++) {
		if (nums[i] > min_)
			min_ = nums[i];
	}
	
	for (int i = 2; i <= n; i++) {
		int ans;
		int  idx;
		answer(vec, i, min_, ans, idx);
		printf("%d %d\n", ans, nums[idx]);
	}
	return 0;
}

第一次电话面试笔记

这个环节讲道理不该讲的,但是我还是贴出来给其他人参考吧。
自我感觉笔试是很烂的,因为最近忙着准备文章进度跟踪和开题材料的准备。(插一句:笔者普通本科计算机专业(重点院校的同学们请不要秀优越感,谢谢),硕士读光学,从事三维测量、三维重建、图像处理的研究,最近沉迷深度学习不能自拔)
收到面试邀请我是很意外的,因为最近一直在看书,编程手生了,而且裸考(我不管考啥都是裸考),笔试做的很烂,投的技术研究TEG-计算机视觉,14:1的报录比。于是乎约定当晚7点半进行电话面试。


开始:我主动问了下面试一般视场,如果时间紧我就长话短说,电话那头(不知道是不是HR)说:一般20~30分钟(最终我面了38分钟。。),但是没有具体的时间限制。让我自我介绍,我内心:????我简历不是都有咩?不知道为啥据说所有HR都喜欢来这么一套,我就挑重点把老本行+现在专业+主攻方向说了说。我还顺便提了下我的爱好:摄影,插一句:虽然我穷,但是还是喜欢摄影。然后让我说一下我简历里那么多实践经验,挑一个最深刻的,我:动车库检机器人项目,毕竟是我研究生阶段的主要工作。。一套设备一百万呢(虽然铁路上几千万的设备很常见),于是乎一通描述,大概描述了一下 现阶段都是结构光、TOF、双目…反正都是三角测量原理,


实践项目过程中,印象最深的一次经历,也就是理论和实践发现不一样的时候怎么解决,说一个就行。那就很多了,我就刹不住了。


项目实践过程中遇到问题怎么定位问题并且解决。其实说真的,没有固定的方法,真让我说方法我也就只能说一些简单的,遇到的问题五花八门,而且根源也都不一样,有些是机械的锅有些是电气的锅有些是软件的锅,反正我们做算法的没有锅,有锅也不承认(手动狗头)。


你有一篇文章:动态构造二叉树…讲一下主要做了些什么,为什么要这么做?
背景:balabala,所以从Huffman树得到启发…就可以尽量…然后达到这个效果。这么做的原因很单纯:当初学C++学OpenCV时候光学不练非好汉 ,就把这个实现了,练练手,然后顺便投了一篇文章(而且和我课题无关,学校还不认。小声bibi)


有没有了解贴图、手机美颜之类的
有,感觉挺好玩,之前自己做过一点。语义分割然后贴图。


我们其实 不光有游戏、社交这些业务,也有自动驾驶的研究 ,除了你们用的工业相机外,有没有了解过手机相机、摄像头这些在自动驾驶、AR、VR上的应用。
有啊,不过手机这种摄像头和我们用的工业相机不一样。。。之前有自己尝试过做手机相机的标定,然后发现。。。etc


你对自己工作的要求是什么:我对计算机视觉比较感兴趣,也对手机相机感兴趣,所以想做和手机相机或者计算机视觉、图像处理相关的工作。


后来接到一个电话,希望我去深圳总部现场面试,问有没有时间。我看,有戏啊。但是比较忙,于是乎只能等安排再来一次电话面或者视频面。


第二次电话面试

是一个做移动客户端的大哥。告诉我上一个面我的是做计算机视觉的大哥。我看我后台简历投递已经变成了移动客户端开发。这次面试算是比较失败的。所以就只是简单说下感想:裸考的坏处,数据结构长时间不碰忘了,只是都还有印象,概念都忘了。这位大兄弟建议我跟着做客户端,他的团队也有做视觉最后转过去的。
说:当前计算机视觉竞争很激烈,刚才才面过一个也是做这方面的,国内如果想做这个还是最好是一些大的实验室。问我是不是能接受做客户端。我:我知道我现在的水平做计算机视觉可能能力不够,但是我比较喜欢这个东西,所以我希望做手机图像相关的工作可以不脱离这个领域,会慢慢努力,希望在这个领域有些进步。手机客户端之前做过一些(一周),感觉如果只是拖UI拽控件的话,可能我做不下去。这位大哥安慰我:…其实面试已经结束了,我们总希望自己的工作能够和公司的需求能够match,但是这种情况是可遇不可求的。更多的情况是你自己做出取舍去满足公司的需求,我的团队就有几个…所以,继续加油。
说实话,突然觉得鹅厂的人挺暖的。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值