9.25小米笔试
1.
usigned int a=11;
int b=-2;
int c=0;
while(a+b>0)
{
a=a+b;
c++;
}
求返回的C的值
答:陷入到无限循环中,while循环不终止,无法输出c的值,因为a为unsigned类型,其值始终为正。
2.括号的问题:{{[()]}},正确的匹配,问{],(]等错误的匹配,问函数test(string s)判断字符串是否有误3.写函数给字符串添加正确数量的括号来修正错误,问添括号的方法
4.另外两道编程大题。(一道矩阵染色的问题;一道浮点型数据求区域乘积最大的问题)
9.26趋势科技面试
1.是否有过多线程编程
2.SOCKET流程
3.如果要在socket中选取特定的ip该怎么做
4.介绍进程通信IPC,及方法
5.互斥锁
6.TCP与UDP的区别
9.26金山面试
1.泛型编程
2.智能指针
3.左连接和右连接的区别
4.实现一个简单的聊天程序该怎么做
9.26百度研发二面
1.重载new运算符
2.两个字符串a和b,字符串c,判断c是不是由a和b按照各自的顺序构造出来的
自己想到的方法是遍历c字符串,同时遍历字符串a和b进行判断,根据下标位置判断是否满足要求,但是有一些特殊情况没有考虑到,如a为abc,b为aef,c为aefabc,此时遍历a和b时,下标经过了各自的开头a时,不能再回去,想用标志位来记录有过改变的情况,情况很复杂没成功。在网上查些资料,是POJ2192,典型的方法是动态规划。
// abc def --> adbcef √
// abc aef --> aefabc √
#include <iostream>
#include <string>
using namespace std;
int dp[100][100];
int main()
{
string str1, str2, str3;
cout<<"Please input three strings: "<<endl;
cin>>str1>>str2>>str3;
int len1=str1.size(), len2=str2.size(), i, j;
// init
for(i=1;i<len1+1;i++)
{
if(str3[i-1]==str1[i-1])
dp[i][0]=1;
else
break;
}
for(j=1;j<len2+1;j++)
{
if(str3[j-1]==str2[j-1])
dp[0][j]=1;
else
break;
}
// dp
for(i=1;i<len1+1;i++)
{
for(j=1;j<len2+1;j++)
dp[i][j]=(dp[i][j-1] && str3[i+j-1]==str2[j-1])||(dp[i-1][j] && str3[i+j-1]==str1[i-1]);
}
//if(dp[i][j]) i and j are already out of range
if(dp[len1][len2])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}
其中的dp[i][j]表示利用str1的前i个字符和str2的前j个字符能否顺序组成str3的前i+j个字符,若成功则置1,否则置0。状态转移方程为:dp[i][j]=(dp[i][j-1] && str3[i+j-1]==str2[j-1])||(dp[i-1][j] && str3[i+j-1]==str1[i-1])。还需要注意的就是初始化,动态规划就是需要从初始的情况逐步递推出最后的结果。还有一些操作C++的string类型对象问题,如string类型的长度size()函数,见:C++中string类型的总结,最后需要注意的就是字符数组的边界值。
4.给定数组n个数,求是否有一定范围内数的和为0
首先想到的算法是依次遍历数组中的每个数,求数组的序列和,若为0则返回,算法时间复杂度为O(n^2)。
应该是有复杂度更低的方法,自己没想出来,在网上查资料找到了一种解法。
“如果某个sum值出现两次或两次以上,则说明它们之间部分的和为0”。
如:输入整数序列: 2 -3 3 1 0
计算sum[i]的值: 2 -1 2 3 3
其中2和3都出现了两次,说明有两个区间的和值为0,问题转化为求sum数组中是否有相同的数。故算法如下:
①开辟数组sum,保存计算出的sum[i]的值。 O(n)
②判断sum中是否有相同值,首先遍历一遍寻找数组中的最大最小值,建立差值范围大小的哈希表初始化置零。 O(n)
③再次遍历sum数组,对应哈希表中的值,若出现则置一,从而判断是否有重复值。 O(n)
所以这种算法总的时间复杂度为O(n),只是需要一定的空间消耗,为数组sum,O(n)和哈希表O(N),N为范围值。
9.26百度测试面试
1.C++的类模板,编写一个类模板可以装载各种容器
2.有大量数据的表,优化表的查询(拆表;加索引等)
3.红黑树的概念,解决的问题和哈希表的区别
4.搜索引擎中中文分词的方法(在有字典的情况下)
5.电视机性能测试