作为一股清流,我要贴一下今天面试微信岗位的面试题!求大家赏点大米吧。。。
五道题,时间是1个半小时。有智力题,填空题,编程题……共5道。 还真是俱全。据说微信面试有八轮,这在国内也是罕见的了。看看自己能走多远吧。
话不多说,上面经:
***Attention: 附件跟这个帖子内容一样。***
# Tencent WeiXin Onsite 复盘
### Question 1: 智力题:赛马
##### Description:
64匹马,每场8赛道赛马。求决出前四名所需的最少比赛场数。(不能计时,但可以根据快慢推理,如A > B && B > C => A > C
##### Solution
- Step 1: 8 * 8 小组赛,每个组决出快慢顺序, 共8场
- Step 2: 冠军争夺战,八个小组的头名参加:设冠军的金牌为A组A1斩获,前四名所在的小组设为A,B,C,D,有A1 > B1 > C1 > D1。共1场。
- Step 3: 亚/季争夺战:A组2-4名,B组1-3名,C组1-2名 决出前三名。其中前两名分获银牌和铜牌。共1场。
- Step 4: 如果C1未能斩获铜牌,则D1已经确定无缘第四名,第四名由Step 3比赛中的第三名获得。否则D1与其进行一场加赛,决出最终谁是第四名。
- Conclusion: 共需比赛10场或者11场。
### Question 2 N个无序排列的数中的前K大的数
#### Description
- N > 0, N >= K > 0.
- 最快算法的时间复杂度为多少?写出算法。
#### Solution
##### 常规思路: MinHeap, i.e., std::priority_queue in C++ STL
- O(nlogn) Time, O(n) Space
```c++
vector<int> topK(vector<int>& nums, unsigned k) {
vector<int> result;
if (k == 0) return result;
std::priority_queue<int, vector<int>, std::greater<int>> pq;
for (auto& c : nums) {
pq.push(c);
if (pq.size() > k) {
pq.pop();
}
}
while (!pq.empty if (!isdigit(str[i])) {
return false;
}
i++; j++;
int k = i;
while (k < sn && isdigit(str[k])) {
if (match(str.substr(k), pat.substr(j))) {
return true;
}
++k;
}
}
break;
default: {
if (str[i] != pat[j]) {
return false;
}
i++;
j++;
}
break;
}
}
while (j < pn) {
if (pat[j] == '*') {
j++;
}
}
return j == pn && i == sn;
}
```
#### Question 5: Reverse Linked List
- Leetcode 206
|