富途一二三面
一面
9.25,一个小时
1. 手撕代码
1.1 买卖股票1
只能买卖一次
1.2 阶梯收费程序
2. 八股
浏览器按下enter全过程;
数据库索引类型,索引为什么用B+树;
http相关;
最后还做了几道选择题,有操作系统,正则表达式之类的。
二面
9.28,一个小时
1. 手撕代码
1.1 删除一个数后数组乘积最大值,返回下标
最开始只考虑了如下三种情况:
- 全都是正数:返回最小值的下标;
- 偶数个负数:返回最小的正数的下标;
- 奇数个负数:返回最大的负数的下标;
然后面试官说不完全正确让找一下问题,找了半天发现少考虑了一种情况:偶数个负数的情况下,如果数组中没有正数,那么返回的应该是最小值而非最小正数。
int maxMultiply(const vector<int> nums) {
int n = nums.size();
int negCnt = 0;
for (auto num : nums) {
if (num < 0) {
++negCnt;
}
}
int index = 0;
// No negative num, or all num is neg and negCnt is even.
if (negCnt == 0 || (negCnt % 2 == 0 && negCnt == n)) {
int curMin = INT_MAX;
for (int i = 0; i < n; ++i) {
if (nums[i] < curMin) {
index = i;
curMin = nums[i];
}
}
return index;
}
// Even negative num and exist positive num.
if (negCnt % 2 == 0) {
int curMinPos = INT_MAX;
for (int i = 0; i < n; ++i) {
if (nums[i] >= 0 && nums[i] < curMinPos) {
index = i;
curMinPos = nums[i];
}
}
return index;
}
// Odd neg nums.
int curMaxNeg = INT_MIN;
for (int i = 0; i < n; ++i) {
if (nums[i] < 0 && nums[i] > curMaxNeg) {
index = i;
curMaxNeg = nums[i];
}
}
return index;
}
1.2 找到数组中第二大的数
int secMax(const vector<int>& nums) {
int n = nums.size();
int max = nums[0];
int sec = INT_MIN;
for (int i = 0; i < n; ++i) {
if (nums[i] > max) {
sec = max;
max = nums[i];
}
else if (nums[i] > sec) {
sec = nums[i];
}
}
return sec;
}
这道题要求的是第二个,所以可以用这种解法。如果要找第k大的值的话可以用**** 的方法。
2. 智力题:
等量红墨水蓝墨水,红墨水滴蓝墨水一滴,混合均匀后蓝墨水再滴到红墨水一滴,证明二者浓度。
3. 八股
之后没有多少时间了,就问了几道常规八股,不太记得了。
三面(HR面)
10.09,20min
怎么了解到富途的,为什么投递;
找工作最看重哪些因素;
三个词形容自己;
HR介绍公司情况;
反问。
正浩创新EcoFlow公司福利 644人发布
查看1道真题和解析