OPPO FTE 研发面试体验,校园
OPPO R&D 于 2019 年 8 月 6 日访问我校招聘 FTE。
在线编码轮:这一轮由hackerearth平台上托管的3道编码问题组成。这些问题有简单和中等难度。
问题 1 :给定一个正数 n,求自然数从 1 到 n 的排列总数,其中素数的索引(从 1 开始)也是素数。返回 ans%1000000007。
约束:1<=n<=10^6。
样本输入:n=5,样本输出:12
可能的有效排列是:(1, 2, 3, 4, 5), (1, 2, 5, 4, 3), (1, 5, 2, 4, 3), (1, 5, 3, 4, 2), (1, 3, 2, 4, 5), (1, 3, 5, 4, 2), (4, 2, 3, 1, 5), (4, 2, 5, 1, 3) , (4, 5, 2, 1, 3), (4, 5, 3, 1, 2), (4, 3, 2, 1, 5), (4, 3, 5, 1, 2)。
解:求从 1 到 n 的素数个数,设数为 p,那么这 p 个素数可以排列在 p 中的 p 个位置!方式和剩余的(np)数可以排列在(np)中!方式。所以需要的ans是p!*(np)!。
问题 2 :给定一个包含 n 个整数的数组 A,让 i 表示 A 的子数组的长度。对于子数组的每个可能长度,即 1<=i<=n,计算子数组的总数,使得其中所有元素的总和小于大于或等于 k。
输入格式:第一行编号测试用例,k 和 n 的第二行值,第三行包含数组的元素。
输出格式:为每个测试用例打印 n 个由空格分隔的数字,其中每个数字都不是。长度为 i 的子数组满足上述条件。
约束:1<=t<=20、1<=n<=10^5、1<=k<=10^15、1<=A[i]<=10^9。
输入:t=1, k=4, n=3, arr= 1, 2, 3, 输出:3 1 0, 解释: 长度 1 : [{1}, {2}, {3}], 长度 2: [{1, 2}],长度 3:[]
解决方案:一旦窗口元素的总和大于k,我们就可以使用滑动窗口方法来解决问题。该窗口中大小为 i 的子数组并更新它们的计数。有关更多详细信息,请查看代码 https://ideone.com/7BvkL9。
问题 3 :给定一个由 n 个正整数组成的数组,计算每对索引 i、j 的 (a[i]/a[j]) 的总和。
约束:1<=a[i]<=10^5, 1<=n<=10^5。
样本输入:n=3,arr=[2, 4, 5]。
样本输出:8
解释:Ar[0]/Ar[0] + Ar[0]/Ar[1] + Ar[0]/Ar[2] = 1 + 0 + 0 = 1
Ar[1]/Ar[0] + Ar[1]/Ar[1] + Ar[1]/Ar[2] = 2 + 1 + 0 = 3
Ar[2]/Ar[0] + Ar[2]/Ar[1] + Ar[2]/Ar[2] = 2 + 1 + 1 = 4,总和 = 1+3+4=8。
解决方案:首先,预先计算等于数字计数的 b[i] 值??? i ,它可以在O (arr 的最大元素)中完成。考虑一个数字 i ,所以 i 和 2*i (不包括 2*i )之间的所有数字的地板将为总和贡献 1。所有数字在 2*i 和 3*i 之间(3*i 不包括在内)将为总和贡献 2,依此类推。代码中的 mul var 考虑了这个问题。像筛子一样,现在计算答案的变化很容易,因为我们知道这个和下一个倍数之间的元素数。有关更多详细信息,请查看代码 http://ideone.com/Xjpk7j。
本轮共有44名候选人入围面试。
3轮面试2技术1 HR
Round1:这一轮面试官主要关注基本的C概念。
一世。如何初始化函数中的指针。以下 printf(++i, –i, i++, i–, i) 的输出将是什么。在最坏和最好的情况下合并和快速排序时间复杂度,并且还要求我编写伪代码以进行快速排序。
ii.在内存管理方面定义程序的执行,我向他解释了函数及其局部变量如何加载到堆栈中以及它们的释放是如何发生的。然后他问解释程序的执行而不考虑内存管理,然后我向他解释了编译器设计词法分析、语法分析等的 6 个阶段。
iii.他问我关于悬空指针以及它如何影响程序的正常执行。
iv.写语法“指向函数的指针数组返回指向函数返回char指针的函数,我在这方面犯了一个小错误,后来面试官纠正了我。
v. 检测链表中的循环。我告诉他缓慢和快速的指针方法,他要求我提供不同的解决方案。我问他列表中的重复项,他说列表中没有任何重复项然后我告诉他节点的日期可以存储在哈希图中,一旦我们得到地图中已经存在的条目,其中就有循环.后来面试官告诉我,当有重复时该方法将如何工作,然后我告诉他,我们将在地图中存储节点的地址,而不是在地图中存储元素的值。
六。然后他问了我实习时做的项目,一些与此相关的问题。
七。他问我 int 的大小,然后他给了我一个具有 2 个 int 类型和一个 char 类型变量的结构,并问我该结构的大小。后来他让我用我不知道的c编写运算符大小的代码。然后他问我在OPPO之前你还申请了哪些其他公司,为什么没有被选中。
这一轮对我来说是混合的,我被选中进入第二轮。
Round 2 :在这一轮中,面试官让我解决一些编码问题并问了一些糟糕的问题。首先他查看了我的在线编码回合分数,我无法为第三个问题提供优化的解决方案,所以他让我优化那个问题我给了他一个优化的方法,虽然没有完全优化,但面试官对我的方法印象深刻。
他要求我提供以下程序的输出。
静态 int u=10;
诠释u=20;
int fun() {静态 int u=10;}
int main() {打印你;}
他后来就静态变量和全局变量之间的差异提出了许多问题,其中内存分配给它们。然后他问我关于静态和动态绑定,并让我为两者写一个例子。什么是函数重载写一个例子,在运行时完成的重载和覆盖中,在编译时完成。然后他问我蒙蒂霍尔问题 https://en.wikipedia.org/wiki/Monty_Hall_problem,我回答了他要求我证明的问题,我用贝叶斯定理(条件概率)解释了他。
打印树的垂直顺序,像树结构一样打印给定的树(类似于模式打印问题),One Bfs 问题,合并 K 排序数组和堆及其应用。
第三轮: (HR)面试从正式介绍开始。她问我在我实习的公司的PPO机会。后来她问我今天过得怎么样,在我们的面试过程中你最喜欢的一件事和你不喜欢的一件事。你将如何带来移动技术的创新。
终于有18名学生(包括我)被选中了!!!
提示:除了数据结构和算法之外,还需要学习 C 基础知识、基于输出的问题、指针等。
通过他们向每个学生详细询问 OOPS 的整个 OOPS 概念。
保持冷静和耐心(尽管在遇到一系列拒绝时特别难以保持),并在整个安置季节中相信自己的技能。
本文由Aishwary Kumar 提供。