博客学习十——二分搜索、扫描算法、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?
返回第一次出现的位置: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?
相关文章推荐
- 【算法导论学习-004】二分搜索(BinarySearch)
- 插入算法 二分搜索 读数据结构与算法-C++
- 二分查找算法、折半搜索、二分搜索
- 数据结构与算法学习之路:二分查找的非递归和递归算法
- 【从零学习经典算法系列】分治策略实例——二分查找
- 搜索查找 - 算法学习
- 算法学习---对象类型的数组二分查找实现
- 一天一道算法题--6.19--二分搜索
- 算法学习---对象类型的数组二分查找实现
- 遗传算法与直接搜索工具箱学习笔记 -----从直接搜索算法开始
- 一步一步学习java数组学习(二分搜索)
- 一些重要的算法------启发式搜索,束搜索(beam search),二分查找算法 and so on............
- 遗传算法与直接搜索工具箱学习笔记 四-----从直接搜索算法开始
- 博客学习六——快排和其他算法
- 算法学习---基本数据类型的数组二分查找实现
- 学习算法手记【原】- 二分查找
- 遗传算法与直接搜索工具箱学习笔记 五-----使用GPS算法寻找一个函数的最小值
- 「算法」查找二分搜索树的第K个元素
- HDU 4004 The Frog's Games(基本算法-贪心,搜索-二分)
- Java二分查找算法学习笔记。