算法系列之一

(1) 对于一个单向链表,试写出找到它的倒数第m个元素的函数,注意变量命名、注释、时间复杂度、空间复杂度。注:要求写出可编译并可以运行通过的程序代码。

https://github.com/yangxt225/findMLastNode

 

(2) 写一个千位分隔符算法,函数原型是
char * format_thousands_separator(unsigned long n);
要求实现效果是:
1.使用者不需要释放返回的字符串指针
2.支持最多调用16次而不返回相同指针地址
可以用以下方式测试:
printf("num1(%s), num2(%s), num3(%s)\n",
    format_thousands_separator(0),
    format_thousands_separator(123456),
    format_thousands_separator(23456789));
注:要求写出可编译并可以运行通过的程序代码。

https://github.com/yangxt225/format_thousands_separator

 

(3) 实现A*寻路算法.

要求写出可编译运行通过的程序代码.

A*讲解可参阅博文:A*寻路算法

实现代码:

https://github.com/yangxt225/AStar

 

(4) 打印10000以内的所有质数,注意时间空间复杂度.

 https://github.com/yangxt225/isPrime

 

(5) 判断主机字节序是大端还是小端.

什么是大/小端呢?所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。(在低位地址的角度看,如果低位地址存放的是高位值,那么则是大端;如果低位地址存放的是低位值,那么则是小端.)比如十进制数0x11223344在大端机上是"(低地址)11223344(高地址)",在小端机上是"44332211",而一个机器是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小端情况是不同的。当然我们通常使用的x86+windows是小端。

https://github.com/yangxt225/bigOrLittleEndian

 

(6) 字符串逆置.注意效率.

这里实现三种方法, 分别采用双指针,递归和异或(使用异或来进行字符的原地交换);

https://github.com/yangxt225/strReserve 

 

(7) 已知矩形的左下角(MinX, MinY),右上角(MaxX, MaxY)坐标,判断两个矩形是否相交:

思路1: 判断相交的情况比较麻烦,所以可以采用判断不相交的情况,其他情况就是相交了.

思路2: 计算两个矩阵的中心点, 分别判断中心点的距离是否大于两个矩阵之间的宽,高.

程序只需做几个简单的条件判断,自行完成;

 

(8) 1. 读取一个文件中的内容,删除所有行首的"Line"(如果有的话);

  2. 求和:求n到m的和,支持-10^9 < m, n < 10^9;

https://github.com/yangxt225/fileStrOp

 

(9) C++实现各种排序算法:

使用C++实现了几种排序算法(冒泡,插入,选择,快速,堆,合并,基数,希尔排序)

https://github.com/yangxt225/sort

 

(10)

1. 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字.

思路:数组中有两个数字只出现1次,直接"异或"一次只能得到这两个数字的异或结果,若题目中这两个只出现1次的数字分别为A和B,如果能将A,B分开到二个数组中,那显然符合“异或”解法的关键点了。因此这个题目的关键点就是将A,B分开到二个数组中。由于A,B肯定是不相等的,因此在二进制上必定有一位是不同的。根据这一位是0还是1可以将A,B分开到A组和B组.

2. 一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字.

 分析可参见博文: http://zhedahht.blog.163.com/blog/static/25411174201283084246412/

  https://github.com/yangxt225/findTwoNotRepeatNumberInArray

 

(11) C++标准中,虚表指针在类的内存结构位置没有规定,不同编译器的实现可能是不一样的。请实现一段代码,判断当前编译器把虚表指针放在类的内存结构的最前面还是最后面

https://github.com/yangxt225/vptrPos

 

(12)  欧几里得算法求最大公约数算法的递归和非递归C实现;

扩展欧几里得算法求线性不定方程的递归和非递归C实现:

https://github.com/yangxt225/GCD

(13) RSA算法里头经常要用到“求x的n次方模m”这样的过程,通常使用O(log(n))的模重复平方算法来实现. c实现源码:

https://github.com/yangxt225/powerMod

 

posted @ 2016-07-05 23:32  小天_y  阅读(424)  评论(0编辑  收藏  举报