数组、字符串、链表、树面试题汇总

数组

1.      如何用递归实现数组求和

2.      如何用一个for打印出一个二维数组

A[count/col][count%col]

3.      在顺序表中插入和删除一个节点平均移动多少个节点

插入:(0+n)/2

删除:(0+n-1)/2

4.      如何用递归算法判断一个数组是否是递增?

Bool up(int a[],int beg,int end)

{

           If(beg >end)

                    Returnfalse;

           If(beg ==end)

                    Returntrue;

           Return a[beg]

}

Or

Bool up(int a[],int len)

{

           If(len <1)

                    Returnfalse;

           If(len == 1)

                    Returntrue;

           Return a[len-1]>a[len-2]&& up(a,n-1);

}

5.      递归和非递归实现二分查找

6.      如何在排序数组中,找出给定数字出现的次数

二分查找基础上修改。当a[mid]==K时,right=mid-1,继续向左查找,直到最左;

同理向右查找,知道最右。两者相减+1得到次数,O(logn)

7.      如何计算两个有序整形数组的交集。

长度相当:类似于归并,两个指针。

长度悬殊:短的在长的中折半查找

8.      如何找出数组中重复次数最多的数

有序:O(n)遍历即可

无序:空间换时间,hash_map,遍历次数找最大。

9.      如何在O(n)时间内找出数组中出现次数超过了一半的数。

1,  Hash

2,  Counter=1;num=a[0]。下一个数==num,counter++,否则counter--,counter==0时,num=next数

10.  如何找出数组中唯一的重复元素

异或

位图法:需知道数的范围,确定空间大小

11.  如何判断一个数组中的数值是否连续相邻

12.  如何找出数组中出现奇数次的元素

异或

扩展:两个奇数次,三个奇数次的数如何求

13.  如何找出数列中符合条件的数对的个数

14.  如何寻找出数列中缺失的数

For sum求和-(1+n)n/2

15.  如何判定数组是否存在重复元素

1.      排序

2.      位图

16.  如何重新排列数组使数组左边为奇数,右边为偶数

同计算有序数组中求两节点使和为N,前后指针

17.  如何把一个整形数组中重复的数字去掉

排序;然后两个指针,一个toreplace,一个遍历cursor,初始都为0,当cursor不等于前一个,将cursor写入toplace,两个指针都+1;否则为重复的,只cursor++

18.  如何找出一个数组中第二大的数

最大、二大两个变量,便利一遍即可。是topK问题维护k个数数组的特殊情况。

19.  如何寻找数组中最大和最小值

1,  一般2n次比较

2,  两两组合比较,最大和max比较,最小和min比较,将为1.5N比较

20.  如何将数组后面M个数移动为前面M个数

左旋、右旋问题,三次逆序即可

21.  如何计算出序列的前N项数据

多个数组,每次选取最小的,然后该数组计算下一个元素

22.  判断一个整数是否可以表示成N个连续正整数的和

http://blog.csdn.net/nanjunxiao/article/details/9169807

第26题

 

链表:

1.      如何使用链表头

2.      如何找出链表倒数第K个元素

3.      单链表反转

4.      如何寻找单链表的中间节点

5.      如何进行单链表的排序

冒泡、归并、快排

6.      如何实现单链表交换任意两个元素(不包括表头)

7.      如何检测一个较大的单链表是否有环?环的入口点

8.      判断两个单链表(无环)是否交叉

9.      如何删除单链表中的重复节点

Hash_map

10.  如何合并两个有序链表(非交叉)

归并排序的Merge过程

 

字符串:

1.      字符串逆序

2.      如何找出一个字符串中第一个只出现一次的字符:

Hash,因为时字符,范围确定

3.      如何输出字符串的所有组合

递归

4.      如何检查字符是否是整数

Isdigit(char c)

 

二叉树:

1.      递归非递归遍历各种遍历二叉树

2.      已知先序遍历和中序遍历,求后续遍历结果

递归建树,递归遍历

知道先序和后续是无法确定树的

3.      如何递归非递归求二叉树的深度

只说非递归的:

1.      先序非递归遍历,节点中加入深度,子树入栈深度加1,到叶子节点和max比较

2.      层次遍历

4.      如何判断两棵树是否相等

子树对称情况

5.      如何判断二叉树是否是平衡二叉树

http://blog.csdn.net/nanjunxiao/article/details/9174657第60题

6.      霍夫曼编码

你可能感兴趣的:(数据结构/算法)