自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码农也有梦

To seize everything you ever wanted

  • 博客(94)
  • 收藏
  • 关注

原创 寻找单链表的中间节点(可能包含环)

首先要判断链表是否有环,如果有环的话,要判断环的入口节点。#include #include #define N 9struct listNode{ int value; struct listNode* next; listNode(int v = 0, listNode* ne = NULL) { value = v; next = ne; }};void

2013-07-21 14:03:07 966

原创 全世界失眠

这周末实验室去北戴河玩,可是小师妹不一定去,突然觉得好无趣啊。她,就是我的晴雨表。

2013-06-26 21:29:09 1075

转载 编译和链接的区别

在多道程序环境中,要想将一个用户源代码变成一个可以在内存中执行的程序,通常分为三个步骤:编译、链接、载入。       (1)编译:由编译程序将用户的源代码编译成若干个目标模块。       (2)链接:由链接程序将编译后形成的一组目标模块以及它们所需要的库函数链接在一起,形成一个完整的载入模块。       (3)载入:由载入程序将载入模块载入内存。

2013-06-24 10:59:03 804

转载 以指向函数的指针作为函数形参实现多个函数的替换

/*=============================================================以指向函数的指针作为函数形参实现多个函数的替换 ============================================================== 作者:最后的村长

2013-06-23 20:53:56 751

原创 多态继承的一个小例子,mark一下。

#include using namespace std;class Point2d{public: Point2d( float x = 0.0, float y = 0.0) : _x(x),_y(y){}; float x(){ return _x; } float y(){ return _y; } virtual float z(){ return 0.0

2013-05-08 15:53:18 826

转载 有关sizeof strlen typedef define的面试题

对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。下面程序的输出结果为多少?void Func(char str_arg[100]) { printf("

2013-04-17 17:19:00 1587

原创 最大流问题

#include using namespace std;int M,N;int cost[205][205],r;int Min[205],pre[205];bool visit[205]; //搜索标记int bfs(){ int q[205], start = 0, end = 0; memset(visit,false,sizeof(visit)

2013-04-15 20:35:18 733

原创 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。 #include #include using namespace std;

2013-04-11 19:52:06 1736

原创 Topk找出最大的K个数

使用了快速排序中的思想,期望时间复杂度为O(N)。#include using namespace std;void select(int* array, int k, int low, int high){ int i = low, j = high; int temp = array[i]; while (i < j) { while (array[j

2013-04-11 16:02:12 860

原创 二叉搜索树的一些基本操作

#include #include using namespace std;typedef struct BiTNode{ int data; struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;bool searchBST(BiTree T, int key, BiTree f, BiTree *p){

2013-04-10 21:23:10 706

原创 旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。#include using namespace std;int MinInOrder(int* numbers, int index1, int index2

2013-04-10 19:22:07 727

转载 位图运算

#include #define BITSPERWORD 32 #define SHIFT 5 #define MASK 0x1F #define N 10000000 int a[1 + N/BITSPERWORD]; /*** i / 32 对应具体数组元素 i % 32 对应具体数组元素的bit位 i >> SHIFT == i / 32 i & MASK == i %

2013-04-08 22:33:36 1043

原创 单链表结构域顺序存储结构优缺点

简单地对单链表结构和顺序存储结构作对比: 通过上面的对比,我们可以得到一些经验性的结论:1.若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。若需要频繁插入和删除时,宜采用单链表结构。比如说游戏开发中,对于用户注册的个人信息,出了注册时插入数据外,绝大多数情况都是读取,所以应该考虑用顺序存储结构。而游戏中的玩家的武器或者装备列表,随着玩家的游戏过程中,可能会随时增

2013-04-08 21:08:29 3174

原创 位操作符

一、传统的C方式位操作:1.基本操作:   使用一个unsigned int变量来作为位容器。2.操作符:|   按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。&  按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时,result中对应位为1,否则为0。

2013-04-07 23:56:12 730

原创 给出一个函数来合并两个字符串A和B

给出一个函数来合并两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。下面上代码:#include using namespace std;void copyStr(char pachar[], char pbchar[], int alen, int blen, char* &result){ int posa = 0; int posb = 0; in

2013-04-05 19:23:05 2766

原创 有一个整数数组,请求出两两之差绝对值最小的值

1.可以快排,然后遍历一遍排完序后的数组。时间复杂度为O(NlogN+N)。2.先遍历一遍数组a[ ],找出最大值max和最小值min。然后以建立一个(max+min-1)大小的数组b[ ],再次遍历原始数组,b[a[i]-min]++,试图建立一种映射关系,降低时间复杂度。代码如下:#include //#include using namespace std;int findM

2013-04-05 16:11:58 2165

原创 大整数的加法问题

题目列表 > A + B时间限制: 1000ms 内存限制: 1024MB描述输入两个正整数A和B, 求A+B的值输入两个正整数A, B输出A+B的和对于小数据, 0 100样例输入2 3样例输出5代码:#include #include #inclu

2013-04-05 14:38:04 854

原创 二叉查找树后继节点和前驱节点查找

二叉查找树按照二叉树进行组织。二叉查找树关键字的存储方式总是瞒住二叉查找树性质:设x为二查查找树种一个节点。如果y是x的左子树中的一个节点,那么key[x] >= key[y]。如果y是x的右子树的一个节点,那么key[x] 这样对二叉查找树进行中序遍历就可得到书中所有元素的一个非降序排列。查找某一个存在节点的前驱和后继。某一个节点x的后继就是大于key[x]的关键字中最小的那个节点,

2013-04-03 19:12:24 2983 1

原创 鸡蛋篮子算法题

题目:把N个鸡蛋放到M个篮子里,每个篮子不能为空,要求满足:任意给出一个不超过N的数量,都能找到其中某几个篮子的鸡蛋和等于它。请写一个程序,输入N,M,然后输出所有的鸡蛋放法。 题目解释:例如6个鸡蛋放3个篮子的一种可能为1,2,3,任意给出1该题目最早是我在网上看到一道600个鸡蛋放在10个篮子的放法,答案是给出了一个按2的乘积放的特例。我将其改编后用来招聘时考察工程师上机编程技

2013-04-03 15:50:06 2639

原创 如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串),目前只针对字母

针对字母,建立一种映射。#include using namespace std;const int MAX = 58;int isBrotherStr(char* str1, char* str2){ if (!str1 && !str2) { return -1; } else if (!str1 || !str2) { return 0; } else

2013-04-03 11:04:22 964

原创 不开辟用于交换数据的临时空间,如何完成字符串的逆序

不开辟用于交换数据的临时空间,如何完成字符串的逆序(在技术一轮面试中,有些面试官会这样问)#include using namespace std;void change(char* str){ for (int i = 0, j = strlen(str)-1; i < j; i++,j--) { str[i]=str[i]^str[j]; str[j]=str[i]^s

2013-04-02 20:55:20 1079

原创 编写一个程序,把一个有序整数数组放到二叉树中

分析:本题考察二叉搜索树的建树方法,简单的递归结构。 关于树的算法设计一定要联想到递归,因为树本身就是递归的定义。 而学会把递归改称非递归也是一种必要的技术。 毕竟,递归会造成栈溢出,关于系统底层的程序中不到非不得以最好不要用。 但是对某些数学问题,就一定要学会用递归去解决。#include using namespace std;struct student{

2013-04-02 19:05:22 1057

原创 大整数的乘法问题

#include using namespace std;void multiple(char A[], char B[], char C[]){ int TMP, lenA = -1, lenB = -1; while (A[++lenA]!='\0') ; while (B[++lenB]!='\0') ; int Index, start = lenA+l

2013-04-02 18:24:03 725

原创 求最大连续递增数字串

求最大连续递增数字串(如―ads3sl456789DF3456ld345AA‖中的―456789‖)#include using namespace std;int getSubString(char src[], char rst[]){/* cout<<rst<<endl; cout<<"the length of the rst is : "<<sizeof(

2013-04-02 15:47:53 1418

原创 将字符串中的字符'*'移到串的前部分 的一个解法

2005年11月金山笔试题。编码完成下面的处理函数。函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)自己的算法分析:有两个指针q1和q2,从后向前遍历,q2始终指向*,q

2013-04-02 11:22:23 2466 1

原创 搜索引擎面试题

搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前一个日志文件中有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门),请你统计最热门的10个查询串,要求使用的内存不能超过1G。1000万条记录,每条记录最大为255Byte,那么日

2013-04-01 23:56:52 2255

原创 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)

由于可以把任何类型的指针赋给void类型的指针 这个函数主要是实现各种数据类型的拷贝。 用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。 memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。 考虑到内存可能重叠的情况,要在函数中避免有以下方式      但是这里有个制约要考虑清楚

2013-04-01 11:49:21 1892

原创 一个文件,内含一千万行字符串,每个字符串在1K以内,要求找出所有相反的串对,如abc和cba。

现在已经是深夜了,再写个博就睡~题目据说是百度的一道面试题,找了个网上的代码,自己跑了一遍。分析如下:文件的大小上限是10G,不可能在内存操作了。考虑设计一种hash使得如果两个字符串维相反串能得出相同的hash值,然后用该hash将文件中的字符串散列到不同的文件中,再在各文件中进行匹配。比如这样的hash函数对字符串上所有字符的ascii求和,因为长度在1K以内,因此范围在int之内

2013-04-01 00:29:59 2367

原创 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它

首先汇总一下各种思路:1.最原始的做法,检测每一个元素,看它左边的元素是不是小于等于它,右边的元素是不是大于等于它。但这样做时间复杂度会比较大为O(N^2)。2.第二种做法是对Array[ ]进行快排,得到B[ ],当Array[i]与B[i]相等时,就得到了我们想要的元素。3.可以用两个辅助数组,Max[i]和Min[i],Max是存储数组中下标从0到i的最大值,Min是存储数组中下

2013-03-31 20:36:02 1519

原创 本周末计划

把多线程的看下,随后带来心得~

2013-03-30 15:23:19 1328 2

原创 堆排序

首先简要的介绍一下堆排序。1.堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,成为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,成为小顶堆。2.堆排序算法的基本思想:将待排序的序列构成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点。将它移走(其实就是将其与对数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n-1个序列重新构造成一个堆,这样就

2013-03-30 11:22:42 651

原创 希尔排序

介绍一个概念,基本有序,就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间,像{2,1,3,6,4,7,8,2,4,6}这样可以称为基本有序了。下面给出代码:#include using namespace std;void shellSort(int L[], int len){ int i, j; int increment = len; do

2013-03-30 10:16:41 582

原创 单链中的归并排序和快速排序

1.先搞一个单链表的快速排序,不能靠交换value来进行排序。这是百度的一道电面题,当时答得不完整。说一下自己的思路:以表中的第一个结点为比较标准,进行分类,分成两个链表,第一个表中的value都比标准的value小,第二个表中的value都比标准的value要大,注意在分的过程中,要将两个链表切断。然后用递归的方法对两个子表进行排序。。。最后把整个表连接起来。下面给出代码,试了几个数据都可以

2013-03-29 22:19:21 859

原创 sizeof()用法汇总

首先对sizeof()进行介绍,它是C语言判断数据类型长度符的关键字。 用法:sizeof(类型说明符,数组名或表达式);或sizeof 变量名 定义:sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。 1.与strlen()比较      strlen()计算字符数组的字符数,以"\0"

2013-03-29 18:37:34 730

原创 归并排序汇总

1.具体原理就不过多介绍了,先把C++程序设计上面的代码放上来#include using namespace std;void arraycopy(int source[], int sourceStartIndex, int target[], int targetStartIndex, int length);void merge(int list1[], int list1Le

2013-03-29 16:59:42 717

原创 贪心算法之活动选择问题

问题描述:        这是一个调度竞争共享资源的多个活动的问题,目标就是选出一个最大的互相兼容的活动集合。假定有一个n个活动的集合S={a1,a2,...,an},这些活动使用同一个资源,而这个资源在某一时刻只能供一个活动使用。每个活动ai都是有一个开始时间si和一个结束时间fi,其中0 =fj或sj>=fi,则ai和aj是兼容的。在活动选择问题中,我们希望选出一个最大兼容活动集。假定活动

2013-03-27 11:59:57 1233

原创 编程之美子数组之和的最大值

通过确定矩阵区域的上下边界,将二维问题转化为一维问题。时间复杂度转化为O(N*M*min(N,M))具体分析见编程之美。代码如下:#include #include int BC(int** A, int, int, int);int maxSum(int** A, int n, int m){ int maximum = INT_MIN; for (int i = 0;

2013-03-26 09:56:55 629

原创 时间复杂度为O(nlogn)的最长单调递增子序列

写一记,其中利用二分查找法,具体分析见编程之美。#include using namespace std;#define N 20int binarySearch(int src[], int des, int low, int high){ int i = low, j = high; while (low < high) { int mid = (lo

2013-03-25 19:54:19 1237

原创 动态规划之最长公共子序列

具体分析见算法导论,直接上代码了。#include using namespace std;int LCS_Length(string X, string Y, int** C, int XLen, int YLen){ int m = XLen, n = YLen; for (int i = 1; i <= m; i++) C[i][0] = 0; fo

2013-03-25 19:15:13 803

原创 动态规划之矩阵链乘法

Description给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 Input有N个矩阵连乘,用一行有n+1个数数组表示,表示是n个矩阵的行及第n个矩阵的列,它们之间用空格隔开. Output你的输出应该有C行,即每组测试数据的输出占一行,它是

2013-03-25 10:49:49 1127

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除