您的位置:首页 > 其它

博客学习十——二分搜索、扫描算法、C难点

2014-07-12 16:36 225 查看
1、二分搜索:

返回第一次出现的位置:start、end,遇到等于的移动end指针,最后返回end指针的数据

返回最后一次出现的位置:遇到等于的移动start指针,最后返回start指针的数据

2、一个问题:

怎么重新编写代码使二分搜索执行得更快?

用二分搜索树?但是空间上会增大

3、assert艺术

4、计时:

starttime=clock()

clicks=clock()-starttime

5、最大子向量:算法设计技术:

分治算法:nlogn,次平方

扫描算法:线性:

maxsofar=0

maxendinghere=0

for i = [0,n)

maxendinghere=max(maxendinghere+x[i],0)

maxsofar=max(maxendinghere,maxsofar)

6、查找最接近0的最大子向量之和

7、腾讯笔试题
http://blog.csdn.net/kingjinzi_2008/article/details/7785334
==================================================

1、string对象:+号两边至少有一个必须是string类

2、string下标为size_type类型,不是int

3、难点:

一、类型转换:

隐式类型转换:

1)混合型算术表达式:int + double;

2)赋值:

int = double;

int *=0;

3)函数传参:

sqrt((double)int)

4)函数返回:

double=double sqrt();

二、针对用一个表达式判断一个数的相关性质时,多利用位运算,判断一个数X是否为2的N次方:

!(X&(X-1))

三、& ^ | 操作的规律
http://blog.csdn.net/g_spider/article/details/5750665
^ : 取的是两个数相同的位,其余位为0,可用于两数交换:a=a^b;b=a^b;a=a^b;

四、预处理、const、sizeof

1)#define SECOND_PER_YEAR (3600*24*365)UL

2)const对比于宏定义:const常量是数据类型,可以被调试

3)C中:

const int BufSize=100;int buf[BufSize];//false,BufSize占用内存某个地方,编译时的值未知

const int BufSize;int buf[BufSize];//true,BufSize是个声明,其他地方有内存分配;

C++将const看作是内部连接,需写为extern const int BufSize;C中const为外部连接

4)C++中的const成员函数?

5)sizeof()计算的是栈中分配的内存大小,static分配在全局数据区的不会被计算出来,c++中static的数据不会被计算在内,c中struct不能存放static数据

6)数据对齐:数据所在的内存地址必须是该数据长度的整数倍;一般是4字节对齐,若有double,则8字节对齐

7)对于class,在没有数据的情况下,若只有构造函数和析构函数,则sizeof(class)=1,若出现了其他函数,则sizeof(class)=4

五、指针与引用

1)传址传引用

2)经典的找错:

struct S{int i;int *p}s;

main(){

int *p = &s.i

p[0] = 4;

p[1] = 3;

s.p = p;

s.p[1] = 1;

s.p[0] = 2;

}

3)char a[5];

char (*p)[5] = a;//p为指向长度为5的字符数组的指针,a为数组首元素的地址,两边类型不一致

char (*p)[5] = &a;//&a为数组首地址,类型一致

六、多态?模板?STL?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: