[开心IT面试题] 面试题汇总

一、链表系列

1、单链表基础

2、单链表排序、反转

3、找出单链表的倒数第k个元素

4、找出单链表的中间元素

5、给定单链表,检测是否有环

6、有两个有序链表,各自内部是有序的,但是两个链表之间是无序的,合并两个链表。

7、*给定两个非环单链表(first, second),检测两个链表是否有交点,如果有返回第一个交点。

8、n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,

每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。

当一个数字删除后,从被删除数字的下一个继续删除第m个数字。

求出在这个圆圈中剩下的最后一个数字。

 

二、栈和队列系列

1、*栈的顺序栈、链栈实现

2、*队列的顺序表、链表实现

3、定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。

要求函数min、push以及pop的时间复杂度都是O(1)。


 

 

三、数组系列

1、*输入一个已经按升序排序过的数组和一个数字,

在数组中查找两个数,使得它们的和正好是输入的那个数字。

要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。

例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

2、假设你有一个用1001个整数组成的数组,这些整数是任意排列的,

但是你知道所有的整数都在1到1000(包括1000)之间。

此外,除一个数字出现两次外,其他所有数字只出现一次。

假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。

如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?

3、输入n个整数,输出其中最小的k个。

例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。

 

四、字符串系列

1、输入一个表示整数的字符串,把该字符串转换成整数并输出。

例如输入字符串"345",则输出整数345。

2、用C语言实现求字符串长度strlen()函数

3、用C语言实现反转字符串strrev()函数。

4、输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

例如输入“I am a student.”,则输出“student. a am I”。

5、写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)

功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,

并把这个最长数字串付给其中一个函数参数outputstr所指内存。

例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,

outputstr所指的值为123456789

6、在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。

7、定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。

如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。

要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。

8、用C语言实现比较两个字符串strcmp()函数。

9、用C语言实现拷贝字符串strcpy()函数。将字符串一逆向拷贝到字符串二中。

10、只要是原字符串中有相同的子串就删掉,不管有多少个,返回子串个数。

 

 

五、排序系列

1、直接插入排序

2、希尔排序

3、冒泡排序

4、快速排序

5、直接选择排序

6、堆排序

 

六、内存管理

1、malloc和free用法

2、realloc用法

 

七、常见面试题

1、如果每次可以往上爬1个或2个或3个台阶,不能往下走,从第0个台阶开始,爬到第n个台阶有多少种方案?

2、如果每次可以往上爬1个或2个或3个台阶,爬楼梯过程中允许最多往下走一次,每次走1个台阶,从第0个台阶开始,爬到第n个台阶有多少种方案?

3、如果每次可以往上爬1个或2个或3个台阶,爬楼梯过程中允许最多往下走k次,每次走1个台阶,从第0个台阶开始,爬到第n个台阶有多少种方案?

4、*C实现大整数四则运算

5、求1+2+…+n,

要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。

6、不用乘法或加法增加8倍,用同样的方法增加7倍。

7、斐波那契数列

 

八、逻辑推理系列

1、村子里有50个人,每人有一条狗,在这50条狗中有病狗(这种病不传染),于是人们要找出病狗。

2、上排给出十个数,在其下排填出对应的十个数

要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
[0,1,2,3,4,5,6,7,8,9]

3、有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关,

这两个房间是分割开的,从一间里不能看到另一间的情况。

现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。

有什么办法呢?

4、你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。

如果你只能将金条切割两次,你怎样分给这些工人?

5、有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,

A、B、C三人都可看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色牌,

A说不知道,B说不知道,C说不知道,然后A说知道了。

请教如何推理,A是怎么知道的?

 

九、基础题

1、*C语言基础一

2、*C语言基础二





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值