Q3. 二维数组中查找指定的数
递归: 从右上角开始比较
Find(int* matrix, int col, int row)
if matrix == NULL || col ==-1 || row == -1
return 0;
if matrix[col][row] == val
return 1;
else if val > matrix[col][row]
return Find(matrix, col+1,row);
else if val < matrixmatrix[col][row]
return Find(matrix, col,row-1);
Q6. 重建二叉树
由前序和中序遍历结果重建二叉树。
Q 二分查找
Q 快速排序
与经典的快速排序对比;对各种排序的特点,时间空间烂熟于胸;
Q 计数排序
// 对大量的员工的年龄排序,数值范围有限,但数量可能很多,因此
// 用计数排序能在0(n)时间内完成
CountSort(int ages[], int len)
if ages == NULL || len <= 0
return
const int oldestAge = 99;
int ageSort[oldestAge+1]; // 用来对年龄计数,最大99岁
memset(ageSort,0,(oldestAge+1)*sizeof(int));
for int i = 0 to len
if ages[i] < 0 || ages[i] > oldestAge
return
++ageSort[ages[i]];
int j = 0;
for int m =0 to oldestAge + 1
for int n = 0 to ageSort[m]
ages[j++] = m;
Q8
Q9 Fibonacci数列
// Fibonacci数列的0(n)算法当然是从F(0), F(1)...的顺序计算
long long Fibonacci(int n)
if n <= 2
return n
int fbr0 = 0, fbr1 = 1;
int fbrn = fbrnminusOne = fbrnminusTwo = 0;
fbrnminusOne = fbr1; fbrnminusTwo = fbr0;
for int i = 2 to n
fbrn = fbrnminusOne + fbrnminusTwo;
fbrnminusOne = fbrn;
fbrnminusTwo = fbrnminusOne;
return fbrn;
Q10 二进制中1的的个数
法1:用1依次与整数中的位进行与操作
NumOf1(int n)
int a = 1;
int count = 0;
while(n)
if a&n != 0
++count;
a<<1;
return count;
法2:将数n与n-1相与;
分析:
如n = 1100, n - 1 = 1011; 因此,将数-1就是将其最右边的1变为0,1后面的0变成1,相与后有:n&n-1 = 1000;
因此,得到的结果是少了一个1;
NumOf1(int n)
int count = 0;
while(n) // n>0则说明二进制含有1
++count;
n = n&(n-1); // 化去最右边的1
return count;