2023秋招大厂经典面试题及答案整理归纳(181-200)校招必看

本文整理了2023年秋季招聘大厂的经典面试题,涵盖深度优先搜索、算法实现、Git操作(如git pull与git merge的区别)、内存分配方式、C++中的数组限制、动态规划思想、分布式服务接口的幂等性设计等技术要点,是准备校招的程序员必看内容。
摘要由CSDN通过智能技术生成

目录

181. 求此N的最小公倍数。把每个数字分解质因数,算他们 每个质因数的贡献,然后乘起来。我的代码没写好(算质因数不用这么慢的)。

182. 去掉字符串构成回文。其实是经典的求回文子序列个数。

183. 象棋的马走K步之后到(X,Y)的方案数。直接递推。

184. 如何验证图的连通性?

185. git pull 和 git merge 区别?

186. 手写快速排序代码.

187. 内存分配方式有几种?

188. 在VC 6.0中定义一个数组a[1024][1024],能够运行吗?

189. 请描述动态规划的基本思想?

190. 分布式服务接口请求的顺序性如何保证?

191. 编译时多态和运行时多态的区别?

192. 常用的内存管理方法有哪几种?

193. 已知某二叉树的后序遍历序列是dabec,中序遍历序列 是deabc,它的前序遍历序列是什么?

194. 给定字符串(ASCII码0-255)数组,请在不开辟额外空 间的情况下删除开始和结尾处的空格,并将中间的多个连续 的空格合并成一个。例如:” i am a little boy. “,变成” iam a little boy”,C++语言实现,不要用伪代码作答,函数输入输 岀请参考如下的函数原型:

195.给定一颗二叉树,以及其中的两个node (地址均非空), 要求给岀这两个node的一个公共父节点,使得这个父节点 与两个节点的路径之和最小。描述你程序的最坏时间复杂 度,并实现具体函数,函数输入输岀请参考如下的函数原型:

196.计算第K个能表示(2Z * 3勺* 5M)的正整数(i,j,k为整 数)?其前7个满足此条件的数分别是1,234,5,6,8.

197. B-树和B+树的区别是什么?

198.分布式服务接口的幕等性如何设计(比如不能重复扣款)?

199. C和C++分配释放内存区别?

200. 一个单词单词字母交换,可得另一个单词,如 army->mary,成为兄弟单词。提供一个单词,在字典中找到 它的兄弟。描述数据结构和查询过程。


181. 求此N的最小公倍数。把每个数字分解质因数,算他们 每个质因数的贡献,然后乘起来。我的代码没写好(算质因数不用这么慢的)。

#include<bits/stdc++. h>
using namespace std;
typedef long long 11;
#define maxn 100009
int fact [maxn];
bool prime [maxn];
11 mod = 987654321;
int cal (int t, int p) {
int ent = 0;
while(t % p == 0) { cnt++;
t /= P;
return ent;
void first () {
memset (prime, true, sizeof (prime)); prime[1] = false;
for(int i = 2; i <= 100000; i++: { int top = sqrt(i);
for(int j = 2; j <= top; j—) { if(i % j == 0){ prime[i] = false; break;
void solve(int Limit) { first ();
for (int i = 2; i <= Limit; i++' { int top = sqrt(i);
for (int j = 2; j <= top; ji) { if(prime[j] && i % j == 0) {
fact[j] = max (fact [j], cal (i, j));
I
if(prime[i])
fact [i] = max (fact [i], 1);
}
}
int main() {
11 n;
cin^^n;
solve (n);
11 ans = 1;
for(11 i = 1; i <= n; i++) {
for (11 j = 1; j <= fact[i]; j++) {
ans = ans * i % mod;
}
}
cout<<ai^s<<endl;
return 0;


182. 去掉字符串构成回文。其实是经典的求回文子序列个数。

# inc lude <b i t s /s t dc++. h>
using namespace std;
typedef long long 11;
11 f[59] [59];
string str;
11 dfs(int i, int j) {
i£(i > j) {
return 0;
}
if(i == j) {
f[i] [j] = 1;
return f [i] [j];
}
[j] != 0){
return f [i] [j];
f [i] [j] = dfs (i, j - 1) + dfs(i + 1, j) - dfs(i + 1, j - 1); if (str [i] == str[j])
f [i] [j] += dfs(i + 1, j - 1: + 1;
return f [i] [j];
int main。{
cin>>sh;
int len = str.length();
cout«dfs(0, len - l)«endl;
return 0;


183. 象棋的马走K步之后到(X,Y)的方案数。直接递推。

#include<bits/stdc++. h>
using namespace std;
typedef long long 11;
11 dp[10][10] [3];
11 mod = le9 + 7;
 return false;
void cal (int x, int y, int state) { dp [x] [y] [state]: for(int i = 0; i
int tx = x +
int ty = y +
dp[x] [y] [state] = (dp[x] [y] [state] + dp[tx] [ty] [state 1]) % mod;
int main() {
int K;
cin>> K;
int state = 0, nowstate;
dp[0] [0] [0] = 1;
while (K—) {
state = state " 1;
for(int i = 0; i <= 8; i++) {
for(int j = 0; j <= 8; j++) {
cal (i, j, state);
int x, y;
cin^>x>>y;
cout«dp[x] [y] [state] «endl;
return 0;


184. 如何验证图的连通性?

#include<iostream>
#include<queue> ffinclude <stdio.h>
using namespace std;
ffdefine MAX_VNUM 10
typedef struct
{
int weight;
}Adj,AdjMatrix[MAX_VNUM][MAX_VNUM];
typedef struct
{
AdjMatrix adjM;
i nt vNum;
}adjGraph;
〃创建一个图,节点从。幵始,注意传入引用 void CreateGraph(adjGraph &G)
{
cout<<"输入节点个数:"«endl; cin»G.vNum;
cout<<"输入图的邻接矩阵:"«endl;
for (int i=0;i<G.vNum;i++)
{
for (int j=0;j<G.vNum;j++)
{ cin»G. ad jM[i][j]. weight;
}
}
}
/输出一个图
void print(adjGraph G)
{
for(int i=0;i<G.vNum;i++)
{
for(int j =0;j<G.vNum;j ++)
{
cout<<G.adjM[i][j].weight<<"
}
cout«endl;//1寻换行流写入输出流,清空输出緩冲区
}
}
//war shall算法判断图的连通性
bool connectivityWarshall(adjGraph G)
{
adjGraph temp;//临时判断矩阵 temp.vNum = G.vNum;
〃初始化临时判断矩阵
for (int i =0;i<temp.vNum;i++)
{
for(int j =0;j<temp.vNum;j++)
{
If (G.adjM[l][J].weight)
temp.adjM[i][j].weight = 1; else
temp.adjM[i][j].weight = 0;
}
temp.adjM[i][i].weight = 1;
〃矩阵乘法算法Marshall, R(a)
for (int a =0;a<temp.vNum;a++)
{
for (int b=0;b<temp.vNum;b++)
{
if(temp.adjM[a][b].weight)
{
for (int c = 0;c<temp.vNum;c++) {
if (temp.adjM[c][a].weight) temp.adjM[c][b].weight = 1;
}
}
}
}
〃进行判断
for (int i=0;i<temp.vNum;i++;
{
for (int j=0;j<temp.vNum;j++)
{
if (!temp.adjM[i][j].weight)
return false;
}
}
return true;
〃广度优先搜索判断连通性
bool 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值