- 博客(139)
- 收藏
- 关注
原创 Lesson2: MFC框架程序剖析
1. MFC简介(1)MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,利用这些类,可以有效发帮助程序员完成Windows应用程序的开发(2)MFC AppWizard是一个辅助生成源代码的向导工具,它可以帮助我们自动生成基于MFC框架的源代码.在向导的每一个步骤中,我们可以根据需
2013-09-07 11:04:59
1184
原创 Lesson1: Windows程序运行原理及程序编写流程
1. Windows API与Win32 SDK操作系统提供了各种方便开发Windows应用程序的编程接口,所有的函数都在Windows.h头文件中声明。Win32 SDK(Software Development Kit): 即Windows 32位平台下的软件开发包,包括API函数,帮助文档,微软提供的一些辅助开发工具。2. 窗口与句柄窗口是是屏幕上一块矩形区域,是Windo
2013-09-07 10:27:54
1969
原创 面试题45:字符串四则运算的实现
题目:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。说明:1. 四则运算即加减乘除"+-*/" 2. 该表达式中的数字只能是1位(数值范围0~9) 3.另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。例如:若有字符串"8+7*2-9/3",计算出其值为19。主要考点:1. 数字的字符形式变换为数字形式的方法; 2.
2013-09-06 15:48:29
3129
原创 面试题44:字符串的左旋操作
思路:先分别内部旋转两部分,然后整体旋转字符串代码如下:#include "stdafx.h"#include using namespace std;//翻转字符串pBegin和pEnd分别指向字符串的首尾字符void Reverse(char *pBegin, char *pEnd){ if (pBegin == NULL || pEnd == NULL)
2013-09-05 16:42:42
1074
原创 面试题43:丑数
方法一:逐个数进行判断是否为丑数,效率低下代码如下:#include "stdafx.h"#include using namespace std;//判断一个数是否为丑数 1被认为是第一个丑数bool IsUglyNum(int nNum){ if (nNum <= 0) { return false; } while (nNum %
2013-09-05 16:03:46
1192
原创 面试题42:不用加减乘除做加法
分析:(1)十进制加法分三步:(以5+17=22为例)1. 只做各位相加不进位,此时相加结果为12(个位数5和7想家不进位是2,十位数0和1相加结果是1);2. 做进位,5+7中有进位,进位的值是10;3. 将前面两个结果相加,12+10=22(2)这三步同样适用于二进制位运算1.不考虑进位对每一位相加。0加0、1加1结果都是0,0加1、1加0结果都是1。这和异或运算一样;
2013-09-05 13:31:34
7120
原创 面试题41:从字符串中找到第一个只出现一次的字符
思路:用数组模拟哈希表,保存字符和其出现次数的映射关系,然后从头开始扫描字符串即可求解代码如下:#include "stdafx.h"#include using namespace std;//从字符串中找到第一个只出现一次的字符char FirstNotRepeatChar(char *Str){ if (Str == NULL) { retu
2013-09-05 12:30:11
1732
1
原创 面试题40:输出和为指定值的连续正数序列
思路:1. 用两个变量分别表示序列的最小值和最大值。首先把他们分别初始化为1和2,2. 如果从最小值到最大值的序列之和大于给定值,则从序列中去掉最小值,也就是增大最小值;3. 如果从最小值到最大值的序列之和小于给定值,则增大最大值,让序列包含更多的数字4. 由于序列中至少有两个数字,我们一直增加最小值到(1+给定值)/2为止。代码如下:#include "stdafx.h"
2013-09-05 11:23:08
1834
原创 面试题39:求和为指定值的两个数
给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S。思路:代码如下:#include "stdafx.h"#include using namespace std;bool FindNumbersWithSum(int nArr[], int nLength, int sum, int &nNum1, int &nNum2){ if (nA
2013-09-05 10:58:47
1617
原创 面试题38:翻转句子中单词的顺序,单词内字符的顺序不变
题目:给出一个英文句子,翻转句子中单词的顺序,单词内字符的顺序不变。例如:"I am a student."输出"student. a am I"思路:先翻转整个句子,然后翻转单词
2013-09-05 10:46:27
3308
原创 面试题37:数组中只出现一次的数字
题目:整型数组中除了两个数字之外,其他的数字都出现两次,找出这两个只出现一次的数字思路:利用异或运算的性质:任何一个数字异或自己都等于0;1.从头到尾依次异或数组中的每个数字,最终得到的结果就是两个只出现一次的数字的异或结果;2. 异或结果的二进制表示中至少有一位为1,找到结果数字中第一个为1的位的位置,记为第n位;3. 以第n位是否为1为标准把原数组中的数字分为两个子数组,第一个
2013-09-04 21:14:31
1739
原创 面试题36:不使用额外空间将A、B两链表元素交叉归并
#include "stdafx.h"#include using namespace std;//定义结点类型struct Node { int m_value;//结点值 Node* m_next;//指向下一个结点的指针};//创建一个长度为n的链表,返回头结点的指针Node* creat(int n){ Node* head; N
2013-09-04 20:49:17
4048
原创 面试题35:寻找一个字符串中最长的重复子串
思路:1. 用字符串指针数组保存用户输入的字符串的所有后缀字符串;2. 将后缀字符串集合进行排序;3. 比较相邻字符串的公共子串长度,找到长度最大值,保存相应字符串即为所求代码如下:#include "stdafx.h"#include #include #include #define MAXCHAR 5000 //最长处理5000个字符char
2013-09-04 20:32:00
7017
原创 面试题34:简单背包问题
“背包题目”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn,希看从N件物品中选择若干物品,所选物品的重量之和恰能放进该背包,即所选物品的重量之和即是S。递归代码:#include "stdafx.h"#include #include using namespace std;const int N = 7;//物品数量
2013-09-04 19:08:06
8785
转载 static在C和C++中的用法和区别
原文链接:http://blog.csdn.net/skyereeee/article/details/8000512static主要有三个作用: (1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍: 一、局部静态变量 在C/C++中, 局部变量按照存储形式可分为三种auto,
2013-09-02 16:13:40
932
原创 Forward, Backward, Backward+三种求SLCA的方法
给出k个关键字的IDList,记录所有包含(直接、间接包含)关键字的ID号求SLCA的本质就是在K个IDLlist中求集合交集forward:从前往后进行扫描,从K个IDList里选取最大的id号到其他k-1个IDList里进行二分查找,如果都找到了,说明当前的id是一个CA结点,接着找下一个CA结点,用下一个CA结点判断前一个CA结点是否为SLCA结点,具体方法是判断祖先后代关系。
2013-09-02 10:19:27
1891
转载 strust+spring+hibernate 优缺点
struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。 优点:Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效
2013-09-01 20:56:30
2035
转载 编程技术面试的五大要点
扎实的基础知识、高质量的代码、清晰的思路、优化代码的能力、优秀的综合能力是编程技术面试的五大要点。找工作一直是一个热门话题。要想找到心仪的工作,难免需要经过多轮面试。编程面试是程序员面试过程中最为重要的一个环节。如果能在编程面试的环节充分展示自己的能力,那么拿到中意的Offer就是水到渠成的事情。我先后在欧特克、微软和思科等公司任软件工程师,多次接受他人的面试,同时也面试过很多人。
2013-09-01 20:19:51
971
原创 栈,队列,双端队列
stack堆栈,没有迭代器,支持push()方法。后进先出,top()返回最顶端的元素,pop()剔除最顶元素deque双端队列,支持迭代器,有push_back()方法,跟vector差不多,比vector多了个pop_front,push_front方法queue队列,先进先出,不支持迭代器,有push()方法,pop()剔除第一个元素,front()返回第一个元素代码
2013-09-01 19:51:39
2159
原创 面向对象的三大特点
封装:包含两方面,一是将有关的数据和操作代码封装在一个对象中,形成基本单位,各个对象之间相互独立,互不干涉。二是将对象中某些部分对外隐藏,及隐藏其内部细节,只留下少量接口,以便于外界联系,接受外界的消息。这种对外界隐藏的做法称为信息隐藏。抽象的作用是表示同一类事物的本质。继承:软件开发中已经建立了一个类A,又想另外建立一个类B,而后者与前者内容基本相同,只是在前者的基础上增加一些属性和行为
2013-09-01 19:34:01
1050
原创 XML数据上两种语义的关键字查询算法
查询Q = { k1, k2, k3 }stack算法求SLCA基本思想:先序遍历后序(自底向上)处理所有包含关键字的结点从小到大遍历k1,k2两个关键字倒排表中的编码,依次入栈,比较相邻编码,编码中不同部分出栈,出栈时判断其是否为真正的SLCA, 若其没有包含所有关键字,则将包含关键字的信息传递给其父亲,若其包含了所有关键字,则其是一个候选的SLCA(事实上第一个候选SLCA就是一个
2013-09-01 16:55:11
2345
原创 面试题32:数字在排序数组中出现的次数
思路:利用二分查找分别求出该数字在数组中第一次和最后一次出现的位置下标代码:#include "stdafx.h"#include #include using namespace std;//找到数组中第一次出现key的元素的下标int BinarySearchFirstKey(int nArr[], int nLength, int key){ assert(nArr
2013-07-26 20:31:03
782
原创 面试题30:两个链表的第一个公共结点
分析:从链表结点的定义看,两个链表是单向链表。如果两个单向链表有公共结点,那么这两个链表从某一结点开始,他们的m_pNext都指向同一个结点。从第一个公共结点开始,之后它们所有结点都是重合的,不可能再出现分叉。例如:方法一:分别把两个链表的结点放入两个栈中,这样两个链表的尾结点就位于两个栈的栈顶,然后比较两个栈顶的结点是否相同。若相同,则把栈顶弹出接着比较下一个栈顶,直到找到最后一个相
2013-07-26 17:37:02
814
原创 面试题29:数组中的逆序对
暴力方法:扫描数组中的每个数,逐个比较该数字和其后面的数字的大小,若后面的数字比其小,则是一个逆序对。改进方法:先把数组分割成子数组,先统计出子数组内部的逆序对数,然后再统计出两个相邻子数组见的逆序对数。统计逆序对的过程中,需要对数组进行排序。显然排序过程是归并排序。时间复杂度由O(n^2)降为O(nlogn),但需要O(n)的空间复杂度,是用空间换时间的做法。代码:#incl
2013-07-26 17:19:04
908
原创 归并排序
代码:#include "stdafx.h"#include #include using namespace std;//合并两个排好序的数组nArr[nStart, nMid]和nArr[nMid+1, nEnd]void Merge(int nArr[], int nStart, int nMid, int nEnd){ //申请一个长度相同的临时数
2013-07-26 17:07:38
846
原创 面试题25:数组中出现次数超过一半的数字
方法一:先对数组进行排序,再遍历排序后的数组,统计每个数的次数,出现次数最大的数即为要找的数。时间复杂度 O(nlogn) + O(n) = O(nlogn)不需要额外存储空间方法二:先对数组进行排序,出现次数超过数组长度的一半的数必然是数组中间的那个数时间复杂度O(nlgn)+ O(1)= O(nlgn)不需要额外存储空间方法三:不排序,扫描
2013-07-25 10:16:12
1168
原创 面试题27:连续子数组的最大和
注意:当函数输入无效时,返回为0,而子数组的和也有可能为0,为了区分,设置一个全局变量标记输入是否有效。思路用下表说明:代码:#include "stdafx.h"#include using namespace std;bool bInvalidInput = false;//用全局变量标记是否为无效输入//求连续子数组的最大和int FindGreatestSu
2013-07-25 09:58:14
1117
原创 面试题28:二叉树的深度
思路:二叉树的深度等于左右子树的最大深度加1,显然利用递归。代码:#include "stdafx.h"#include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};//求二叉
2013-07-24 17:16:36
1119
原创 面试题24:二叉搜索树与双向链表
分析:1. 二叉树中,每个结点都有两个指向子结点的指针。2. 在双向链表中,每个结点也有两个指针,分别指向前一个结点和后一个结点。3. 二叉搜索树中,左子结点的值总是小于父结点的值,右子结点的值总是大于父结点的值。4. 将二叉搜索树转换为双向链表时,原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子结点的指针调整为链表中指向后一个结点的指针。5. 由于要求转换
2013-07-23 13:05:13
1770
原创 面试题23:二叉树中和为某一值的路径
代码:#include "stdafx.h"#include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};void FindPath(BinaryTreeNode *pRoot,
2013-07-22 22:54:56
991
原创 字符串的三种存放方式
#include "stdafx.h"#include #include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ //用字符串数组存放一个字符串 char str1[] = "I am happy!"; cout << str1 << endl; //用字符串变量存放字符串 string
2013-07-22 20:25:08
2532
原创 用指针输出二维数组
#include "stdafx.h"#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int *p;//指针p是指向整型数据的指针变量 for (p=a[0]; p<a[0]+12; p+
2013-07-22 20:23:35
5740
原创 面试题22:二叉搜索树的后序遍历序列
分析:在后序遍历得到的序列中,最后一个数字是树的根结点的值,数组中前面的数字可分为两个部分:第一部分是左子树结点的值,它们都比根结点的值小,第二部分是右子树结点的值,它们都比根结点的值大。代码:#include "stdafx.h"#include using namespace std;bool VerifySequenceOfBST(int nSequence[], int n
2013-07-22 16:57:48
1456
原创 面试题21:从上往下打印二叉树
代码:#include "stdafx.h"#include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};void PrintFromTopToDown(BinaryTreeNod
2013-07-22 15:43:18
1339
原创 面试题20:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就是不可能是该压栈序列的弹出序列。
2013-07-22 15:18:46
3471
原创 面试题19:包含min函数的栈
题目:普通栈需要O(n)时间才能找到栈中的最大或最小的元素,如何使得栈在O(1)时间内得到其最大或最小值?思路:对栈进行特殊设计,使栈具有包含min,max函数,时间代价为O(1)。
2013-07-22 11:51:16
1563
原创 面试题18:顺时针打印矩阵
分析:把矩阵想象成若干个圈,用一个循环打印矩阵,每次打印矩阵的一个圈#include "stdafx.h"#include using namespace std;void PrintMatrixIncircle(int **nArr, int rows, int columns, int nStart){ int nEndX = columns - 1 -nSta
2013-07-22 11:12:54
7042
原创 面试题17:二叉树的镜像
例如:下面两棵树互为镜像思路:先序遍历树的每个结点,若遍历到的结点有子节点,则交换它的两个结点。代码:#include "stdafx.h"#include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRi
2013-07-21 21:39:39
4572
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅