3.给定一个整数序列及一个整数,找出序列中所有整数配对,配对的两书之和为该整数
方法一:快排+比较
方法二:hash表
遍历序列Xn,对于Xi (1)在hash表中查找Xn-Xi,若找到则配对 (2)若未找到,将Xi存入hash表。(当有Xn-Xi中存在于序列中,则能查找到Xi)。
求更高效的方法!!
4.(1)对于两个排好序的数组数列,找出相同的元素(2)是如果上面的序列没有排序。
(1)很简单,直接比较或者折半查找。(2)可用hash表,假设序列分别为A[n],B[m],我们取长度较小的简历hash表,假设m<n,利用B[m]见hash表,查找A[i]是否存在于B[m]中
求其他解决方法!!
5. 用c怎样实现c++中的虚函数
结构体+函数指针,只需将函数指针指向不同的即可,但函数指针的赋值在main函数中。
参考http://blog.csdn.net/shallwake/article/details/4943365,这篇blog写的很棒,我模仿自己写了下,简化了许多,要学习还是看上面blog的代码比较靠谱。
我自己模仿写的代码
typedef void(*SHOW)(void);
/*基类*/
typedef struct _Shape{
SHOW pshow;
}Shape,*pShape;
/*派生类*/
typedef struct _Circle{
Shape p;
int r;
}Circle,*pCircle;
/*派生类*/
typedef struct _Square{
Shape p;
int h;
}Square, *pSquare;
/*重写虚函数*/
void showCircle()
{
printf("showCircle\n");
}
/*重写虚函数*/
void showSquare()
{
printf("showSquare\n");
}
/*多态,只需要传递基类指针*/
void virtualfun(pShape p)
{
p->pshow();
}
void main()
{
Circle circle;
Square square;
//虚函数初始化
circle.p.pshow=showCircle;
square.p.pshow=showSquare;
//用基类指针指向派生类
pShape p1=(pShape)&circle;
pShape p2=(pShape)□
//传递基类指针,体现多态。
virtualfun(p1);
virtualfun(p2);
}