2022-08-19-微软笔试
题目就不发了吧,外企
想要的私我
#include <algorithm>
int solution(vector<int> &X, vector<int> &Y, int W) {
int n=X.size();
sort(X.begin(),X.end());
int ans=0, e=-1, i=0;
while(i<n){
e=X[i]+W;
while(i<n&&X[i]<=e)
i++;
ans++;
}
return ans;
}
#include <algorithm>
#include <vector>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
string solution(string &S)
{
string a = "";
int n = S.length();
vector<int> c(10, 0);
// std::memset(c,0,sizeof(int)*10);
for (const auto &i : S)
c[i - '0']++;
int i = 9, m = -1;
while (i >= 0)
{
if (i > 0 || a.length() > 0)
a.append(string(c[i] / 2, '0' + i));
if (m == -1 && c[i] & 1 == 1)
m = i;
i--;
}
string pre_mid = m == -1 ? a : a + string(1, '0' + m);
if (pre_mid == "")
return "0";
reverse(a.begin(), a.end());
return pre_mid + a;
}
// 第三题可以用后序遍历,记录子树包含的节点个数,除以5向上取整即可
#include <queue>
#include <set>
#include <vector>
//#include <iostream>
int solution(vector<int> &A, vector<int> &B)
{
int n = A.size(), f = 0;
vector<set<int> > e(n + 1);
vector<int> c(n + 1, 1);
for (int i = 0; i < n; i++)
{
e[A[i]].insert(B[i]);
e[B[i]].insert(A[i]);
}
queue<int> q;
for (int i = 1; i <= n; i++)
if (e[i].size() == 1)
q.push(i);
while (!q.empty())
{
int no = q.front();
q.pop();
int nextNo = *(e[no].begin());
f = f + (c[no] + 4) / 5;
c[nextNo] += c[no];
e[nextNo].erase(no);
if (e[nextNo].size() == 1 && nextNo != 0)
q.push(nextNo);
}
return f;
}#微软笔试##笔试##23秋招#
查看12道真题和解析