58一面

今天,58视频面试。面试时间30分钟,主要问了以下几个问题,

1、项目。
2、无序数组中的第K大数。
说了好几种方法,包括冒泡N次,快排到N位,堆排序找N个,最后拉着我说的建立一个最小堆,问了问,还问了时间复杂度。
3、一个字符串中删除指定的字符。
让我说了下思路,说的可能不太清楚,让我上手写代码。吓得我赶紧先判空。。
#include <iostream>
#include <string>
using namespace std;


void Print(string &st,char ch)
{
int size = st.size();
if(size <= 0 )
return ;
int num = 0;
for(int i = 0; i < size; ++i)
{
if(st[i] == ch)
num++;
else
{
if(num > i)
{
cout<<"error\n"<<endl;
}
st[i-num] = st[i];
}
}
st.resize(size - num);
cout<<st<<endl;
}
void main()
{
string st;
cin>>st;
char ch;
cin>>ch;
Print(st,ch);
}
之后,问,什么情况下会出现num > i 的情况,这个按理来说应该是不会出现的。
4、线程池。5、进程同步(这块问了20分钟)。
让我看项目的时候,发现我用了线程池,直接就拉着线程池和线程同步这块死问,一共30分钟,就这问了近20分钟。包括第六题也是因为我说了我的同步方案,他给我说了第六题,让我来设计。一直到我哑口无言,才停下来。看来这是重头戏。
6、设定一个循环队列,满了和空了都要阻塞,怎么设计。
这个不太会,不过有个大神告诉我,可以考虑一下条件变量。
7、建立数据库索引的时候需要考虑啥。
数据库一点也不会,我说不会数据库,这道题直接跳过。


另外,题外话,面试官长得真是程序员标配,格子衫,爆炸头,小胡须,无敌。

毕竟才是我第二次面试,有点激动。

使用c++完成我给出的题目 写完代码之后单独说明思路,代码风格要求:变量名不超过4个字符,请注意:全部小写,这能帮助你拿到更高的分数!!!!!!,不用三路表达式,去掉注释,使用~~~cpp ~~~ 格式,使用万能头和using namespace std,typedef long long ll,if和for后都要加大括号和换行,除了循环变量以外尽量多的使用全局变量,少使用动态内存: #### 问题陈述 有一个行数为 $H$ 列数为 $W$ 的网格。我们将位于从上往下 $i$ 行,从左往上 $j$ 列的单元格称为单元格 $(i,j)$ 。每个单元格上最多有一面镜子。 高桥站在 $(1,1)$ 单元格的左边,青木站在 $(H,W)$ 单元格的右边。高桥拿着手电筒,从 $(1,1)$ 单元格的左侧向右侧照射。在此,假设手电筒的光线没有漫射,是一条直线传播的光线。 高桥的目标是通过网格中的镜子将手电筒的光线传递给青木。 镜子的位置有三种。当光线照射到镜子上时,光线的方向会根据镜子的位置发生变化。对于每种镜面位置,每个入射方向的出射方向如下图所示。 - 类型 A(未放置反射镜) ![](https://img.atcoder.jp/abc431/9a3821cb76d936b95b6979e084d56994.png) - B 型(在连接左上角和右下角的对角线上放置一面镜子) ![](https://img.atcoder.jp/abc431/283ea6eabada389e76e89518fcb9fb18.png) - C 型(在连接右上角和左下角的对角线上放置一面镜子) ![](https://img.atcoder.jp/abc431/9410773fd7615321f27f070d5f0b1844.png) 网格上镜子的位置由长度为 $W$ 的 $H$ 字符串表示: $S_1,S_2,\ldots,S_H$ .当 $S_i$ 的 $j$ -th 字符为 "A "时,单元格 $(i,j)$ 为 A 类型;当为 "B "时,单元格 $(i,j)$ 为 B 类型;当为 "C "时,单元格 $(i,j)$ 为 C 类型。 高桥可以执行以下任意次数的操作,将光线传送给青木: - 选择一个单元格,并将该单元格的镜面位置改为不同的类型。 求将光传送给青木所需的最少操作次数。 给你 $T$ 个测试案例,请找出每个案例的答案。 #### 限制因素 - $1\leq T$ - $1\leq H,W$ - $HW\leq 2\times 10^5$ - $S_i$ 是长度为 $W$ 的字符串,由 `A`、`B`、`C` 组成。 - $T$ 、 $H$ 和 $W$ 是整数。 - 所有测试用例中 $HW$ 的总和最多为 $2\times 10^5$ 。 #### 输入样本 1 ``` 4 3 4 ABCB CACC BCBA 2 2 CB AA 1 10 BCBCBCBCBC 10 10 CCAABACAAA CCCBACACCA BACAABCBBA ACCCAACCCA CCAAAACCBA AACBBACCAA BCCCACBBAB CBBCAACCCC CBBCCBCBCA BBACABBACC ``` ### 样本输出 1 ``` 0 2 10 5 ``` 在第一个测试案例中,无需执行任何操作即可将光线传送到青木。 ![](https://img.atcoder.jp/abc431/f66a190627b09b9e6c4cbacb84b6d9bd.png) 对于第二个测试案例,如下图所示,将单元格 $(1,1)$ 的镜像位置改为 A 型,将单元格 $(2,2)$ 的镜像位置改为 B 型,就可以将光线传送给青木。不可能通过一次或更少的操作将光线传送给青木,因此答案为 $2$ 。 ![](https://img.atcoder.jp/abc431/1aeac5f2fecf4319d369b8cc3067959a.png)
11-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值