打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
腾讯笔试题

5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。
基本思想:在快速排序的基础上进行优化
代码:
a为一个100000000大的数组,min、max为下标
void sort(int a[],int min,int max)
{
int key = a[min];//记录第一个
int key_i = min;
int i,j;
i = min;
j = max;
int temp;
if(i>=j)
{
return;
}
while(i<>
{
while((i<> {j--;}
if(key > a[j])
{ a[i] = a[j]; a[j] = key; i++; }
while((i= a[i]))
{i++;}
if(key < a[i])
{ a[j] = a[i];a[i] = key; j--; }

}

if(min<10000 && i>10000)
sort(a,min,i-1);
if(i<10000 && max>10000)
sort(a,i+1,max);
}
 1 计算 a^b << 2 (运算符优先级问题)
  2 根据先序中序求后序
  3 a[3][4]哪个不能表示 a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4) 4 for(int i..)
  for(int j..)
  printf(i,j);
  printf(j)
  会出现什么问题
  6 10个数顺序插入查找二叉树,元素62的比较次数
  7 10个数放入模10hash链表,最大长度是多少

假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。。要求高效
现在需要你来实现下面的函数:
boolen Is_Mach(char *str1,char *str2)
方法1
#include
#include
#include
#include
int Is_Mach(const char *src1, const char *src2)
{
unsigned int all_1[256] = {0};
unsigned int all_2[256] = {0};
const char *p = src1;

assert (src1 != NULL && src2 != NULL);

if (strlen(src1) != strlen(src2))
return 0;

while (*p)
{
all_1[*p]++;
p++;
}
while (*src2)
{
all_2[*src2]++;
src2++;
}
while (*src1)
{
if (all_1[*src1] != all_2[*src1])
return 0;
src1++;
}

return 1;
}
int main()
{
char src1[] = “abcdefdjaidjadjapodjasojfidofhdsufhdshfdshgufdghufdghudfghudhgid”;
char src2[] = “japodjasojfidofhdsuabcdefdjaidjadfhdshfhufdghudfgdshgufdghudhgid”;

printf(“%d/n”, Is_Mach(src1, src2));
system(“pause”);
return 0;
}

方法1
#include
#include
#include
#include
int Is_Mach(const char *src1, const char *src2)
{
unsigned int all_1[256] = {0};
unsigned int all_2[256] = {0};
const char *p = src1;

assert (src1 != NULL && src2 != NULL);

if (strlen(src1) != strlen(src2))
return 0;

while (*p)
{
all_1[*p]++;
p++;
}
while (*src2)
{
all_2[*src2]++;
src2++;
}
while (*src1)
{
if (all_1[*src1] != all_2[*src1])
return 0;
src1++;
}

return 1;
}
int main()
{
char src1[] = “abcdefdjaidjadjapodjasojfidofhdsufhdshfdshgufdghufdghudfghudhgid”;
char src2[] = “japodjasojfidofhdsuabcdefdjaidjadfhdshfhufdghudfgdshgufdghudhgid”;

printf(“%d/n”, Is_Mach(src1, src2));
system(“pause”);
return 0;
}
3
bool Is_Mach(char *str1, char *str2)
{
bool isMach = strlen(str1) == strlen(str2);
if (isMach)
{
int count[256] = {1};
for(char *p = str1; *p; ++count[*p++]) ;
for(char *p = str2; *p; ++p)
{
if(–count[*p] == 0)
{
isMach = false;
break;
}
}
}
return isMach;
}

4
bool Is_Mach(char *str1, char *str2)
{
unsigned int isMach = strlen(str1) – strlen(str2);
if (isMach == 0)
{
unsigned int count[256] = {0};
for(char *p = str1; *p; ++count[*p++]) ;
for(char *p = str2; *p; isMach |= –count[*p++]) ;
isMach >>= sizeof(unsigned int) * 8 – 1;
}
return isMach == 0;
}

腾讯笔试题:const的含义及实现机制

const的含义及实现机制,比如:const int i,是怎么做到i只可读的?

const用来说明所定义的变量是只读的。

这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。

腾讯笔试题:tcp三次握手的过程,accept发生在三次握手哪个阶段?

accept发生在三次握手之后。

第一次握手:客户端发送syn包(syn=j)到服务器。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。

三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。

腾讯笔试题:用UDP协议通讯时怎样得知目标机是否获得了数据包

用UDP协议通讯时怎样得知目标机是否获得了数据包?

可以在每个数据包中插入一个唯一的ID,比如timestamp或者递增的int。

发送方在发送数据时将此ID和发送时间记录在本地。

接收方在收到数据后将ID再发给发送方作为回应。

发送方如果收到回应,则知道接收方已经收到相应的数据包;如果在指定时间内没有收到回应,则数据包可能丢失,需要重复上面的过程重新发送一次,直到确定对方收到。

关于UDP协议的简单介绍,可以参考

http://baike.baidu.com/view/30509.htm

腾讯笔试题:统计论坛在线人数分布

求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。

一天总共有 3600*24 = 86400秒。

定义一个长度为86400的整数数组int delta[86400],每个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0。

然后依次读入每个用户的登录时间和退出时间,将与登录时间对应的整数值加1,将与退出时间对应的整数值减1。

这样处理一遍后数组中存储了每秒中的人数变化情况。

定义另外一个长度为86400的整数数组int online_num[86400],每个整数对应这一秒的论坛在线人数。

假设一天开始时论坛在线人数为0,则第1秒的人数online_num[0] = delta[0]。第n+1秒的人数online_num[n] = online_num[n-1] + delta[n]。

这样我们就获得了一天中任意时间的在线人数。

腾讯笔试题:从10G个数中找到中数

在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。

不妨假设10G个整数是64bit的。

2G内存可以存放256M个64bit整数。

我们可以将64bit的整数空间平均分成256M个取值范围,用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。

如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。

腾讯笔试题:两个整数集合A和B,求其交集

两个整数集合A和B,求其交集。

1. 读取整数集合A中的整数,将读到的整数插入到map中,并将对应的值设为1。

2. 读取整数集合B中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2。

通过更改map中的值,避免了将同样的值输出两次。

腾讯笔试题:找出1到10w中没有出现的两个数字

有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数?

申请10w个bit的空间,每个bit代表一个数字是否出现过。

开始时将这10w个bit都初始化为0,表示所有数字都没有出现过。

然后依次读入已经打乱循序的数字,并将对应的bit设为1。

当处理完所有数字后,根据为0的bit得出没有出现的数字。

首先计算1到10w的和,平方和。

然后计算给定数字的和,平方和。

两次的到的数字相减,可以得到这两个数字的和,平方和。

所以我们有

x + y = n

x^2 + y^2 = m

解方程可以得到x和y的值。

腾讯笔试题:需要多少只小白鼠才能在24小时内找到毒药

有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?

最容易想到的就是用1000只小白鼠,每只喝一瓶。但显然这不是最好答案。

既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?

首先让我们换种问法,如果有x只小白鼠,那么24小时内可以从多少瓶水中找出那瓶有毒的?

由于每只小白鼠都只有死或者活这两种结果,所以x只小白鼠最大可以表示2^x种结果。如果让每种结果都对应到某瓶水有毒,那么也就可以从2^x瓶水中找到有毒的那瓶水。那如何来实现这种对应关系呢?

第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶….以此类推。

回到此题,总过1000瓶水,所以需要最少10只小白鼠。

腾讯笔试题:根据上排的数填写下排的数,并满足要求。

根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9。

腾讯笔试题:判断数字是否出现在40亿个数中?

给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?

答案:

unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。

1-20的两个数把和告诉A,积告诉B,A说不知道是多少,
B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少
很简单。2和3
理由是,A只根据一次B对答就判断出了,表明:和的组成 只有两组,同理B也一样.能分为两个组合的数字不多只有5,6 ,5,6都具有这样的特性,当A看到了5时推测5=1+4/5=2+3,B回答不知道,A可以排除1+4的可能,因为1*4=4,(如果2*2=4两个2被认为是一个数时2*2是不合法的)B直接可以知道那两个数,如果是2*3=6的话B很难推测是因为1*6=6还是2*3=6,所以A推测那俩数应该是2和3同理B推测1+6=7,7有三种组合(1,6/2,5/3,4)A不能只根据一次回答就判断,2+3=5,5只有两种组合A是可以推断出来的故B根据A的回答也可以判断出答案2和3.6也具备这种特性推出答案是2和4

但是标准答案是2和3.
1 计算 a^b << 2 (运算符优先级问题)
int a = 2;
int b = 1;
int c = 2;
cout << (a ^ b << c);
6
2 根据先序中序求后序

3 a[3][4]哪个不能表示 a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4)
cout << *(&a[1][1]) << endl
<<*(*(a+1)+1) << endl
<< *(&a[1]+1) << endl
<< *(&a[0][0]+4);
6
6
0012FEC8
5
4 for(int i...)
for(int j...)
printf(i,j);
printf(j)
会出现什么问题
J没有定义,不在其作用域
5 for(i=0;i<10;++i,sum+=i);的运行结果
int i, sum = 0;
for(i=0;i<10;++i,sum+=i);
cout << sum;
55
6 10个数顺序插入查找二叉树,元素62的比较次数

7 10个数放入模10hash链表,最大长度是多少

8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参
2个,逗号运算符,
12 *p=NULL *p=new char[100] sizeof(p)各为多少
都是4
13 频繁的插入删除操作使用什么结构比较合适,链表还是数组
链表
14 enum的声明方式
enum A{
a1,
a2,
a3,
};

1,为节省空间,两个栈共用一个空间,栈底在两边,问什么时候表明空间用完
答案:栈顶相遇时
这道题就是很基础的一个题目,因为是第一道题,所以印象比较深^_^

2,char A[5]; char* B ="abcdefg"; void * C; C = new char[100];
sizeof(A) sizeof(B) size(C)
5,4,4
3,爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是多少
1- 12*11*10*9/12*12*12*12 = 43% ,我忘用1减了....

程序4说明]
设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分
(设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“
,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。
 
本程序输入列表,生成一棵 M 叉树,并由 M 叉树输出列表。假定输入无错误。
[程序4]
#include〈stdio.h〉
#include〈stdlib.h〉
#define M 3
typedef struct node{ char val;
struct node *subTree[M];
} NODE;
char buf[255] ,*str = buf
NODE *d = NULL
NODE *mackTree( ) /*由列表生成M叉树*/
{ int k; NODE *s ;
s = __(1)__
s -> val = *str++ ;
for ( k = 0 ; k < M ; k++ ) s-> subTree[k] = NULL ;
if(*str=’( ‘){
k = 0;
do { str++;
s -> subTree[k] = __(2)__ ;
if ( *str == ‘)’ ) { str++; break ; }
k = k+l ;
} while ( __(3)__ );
}
return s ;
}
void walkTree( NODE *t ) /*由 M 叉树输出列表*/
{ int i ;
if( t != NULL ) {
__(4)__
if ( t -> subTree[0] == NULL ) return ;
putchar ( ‘( ‘ ) ;
for ( i = 0 ; i < m ; i++) {
__(5)__
if ( i! = M - l && t -> subTree[i+l] != NULL )
putchar ( ‘, ‘ ) ;
}
putchar ( ‘) ‘ ) ;
}
}
 
void main( )
{ printf( “Enter exp:” ) ;
scanf( “%S” , str ) ;
d = makeTree() ;
walkTree( d ) ; putchar( ‘/n’) ;
}
有两个集合
集合A{1,7,19,21,55,100。。。}
集合B{7,22,100。。。}
两个集合都是10万个数据(已排序),要求写一个算法,判断B是不是A的子集,算法时间复杂度为Q(N)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
百度往年笔试题
浅析C语言中关于字符串的操作 - C/C++ - 课堂 - 话题 - 张剑 - CSDN学...
strcmp?strcpy?strcat?strlen?的实现?以及与strncat?st...
C++经典面试题
string类相关
unsigned char 与 char
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服