- 博客(45)
- 资源 (5)
- 收藏
- 关注
原创 每日一题(58) - 从1到n整数中1出现的次数
题目来自剑指Offer题目:思路一:暴力法方法:对1到n中的每一个数,分别判断其中1的个数。复杂度:O(n*logn)代码:#include #include using namespace std;int OneNum(int n){ assert(n >= 0); int nSum = 0; int nCurNum = 1; for (int
2013-07-31 21:31:29 2014 2
原创 每日一题(57) - 把字符串转换成整数
题目来自剑指Offer题目:把字符串转换成整型数,与库函数atoi的功能类似。原型: int atoi(const char *nptr);举例:"123" : 123"-123" : -123"00123/2" : 123"-123/2"; : -123"- 123/2" :0"10522545459" : 2147483647 越界"2147483647"; :
2013-07-30 16:58:58 1763
原创 每日一题(56) - 赋值运算符函数
题目源自剑指Offer题目(1):CMyCString类的声明:class CMyCString{public: CMyCString(char* pData = NULL); CMyCString(const CMyCString& str); ~CMyCString(); CMyCString& operator= (const CMyCString& str);
2013-07-29 21:04:03 722
原创 每日一题(55) - 最小的k个数
题目来自剑指Offer题目思路:求最小的k个数,建立一个容量为k的大根堆。插入元素时,堆不满直接插入,堆满且数小插入。代码:封装成类:#include #include using namespace std;const int TOP_K = 8; class CTopKMin{public: CTopKMin(int nMaxSiz
2013-07-29 16:27:04 923
原创 每日一题(54) - 扑克牌的顺序
题目思路大小王用0表示,其他为对应数字。排序 + 计算两数的差值 + 与0的个数比较,确定是否为顺子。 代码#include #include #include using namespace std;bool IsSequence(int nArr[],int n){ assert(nArr && n > 0); int nZeroCount = 0;
2013-07-28 17:19:18 1004
原创 每日一题(53) - 求1+2+…+n
题目来自剑指Offer题目:思路(1):可以使用递归,而且终止条件必须是隐含的。代码:#include using namespace std;int Sum(int n){ int m = 0; n && (m = Sum(n - 1) + n); return m;}int main(){ cout<<Sum(5)<<endl; system("p
2013-07-26 19:46:02 1160
原创 每日一题(52) - 编写strncmp函数
题目来自网络题目:编写字符串比较函数int Strncmp(const char* pStrF,const char* pStrS,unsigned int nCount)。函数功能:比较字符串pStrF和pStrS的前nCount个字符。(1)如果前nCount字节完全相等,返回值就=0;(2)在前nCount字节比较过程中,如果出现pStrF[n]与pStrS[n]不等,则返回
2013-07-26 11:13:24 861
原创 每日一题(51) - 最大子序列积以及区间
#include <iostream>#include <assert.h>using namespace std;//Max[i] = max(nArr[i],Max[i - 1] * nArr[i],Min[i - 1] * nArr[i])//Min[i] = min(nArr[i],Max[i - 1] * nArr[i],Min[i - 1] * nArr[i]); //初始化//Max[0] = nArr[0]//Min[0] = nArr[0]int Max(int x,i
2013-07-24 21:18:34 971
原创 每日一题(50) - 绝对值最大的子序列和以及其区间
题目来自网络题目:给定数组,求其 绝对值最大的子序列和以及对应的区间举例:数组{-5,4,-20,16,-2,-3}的绝对值最大的子序列和为-21,其区间为[0,2]思路:可以使用动态规划求解由于求解的是绝对值最大,需要考虑负值。结果可以转化为要么是和最大(正数),要么是和最小(负数)。可以使用两个数组保存以第i个数为止的子序列之和的最大值和最小值,之后可以根据这个最大值和最小
2013-07-24 15:03:29 2330
原创 每日一题(49) - 最长回文子串
子串:字符串中连续的字符片段。回文:正着看和反着看都一样的字符串。如abba和abbebba是回文,bbab不是回文。最长回文子串:对于字符串的所有子串,找出是回文且最长的那一个举例:(1)babcbabcbaccba的最长回文子串是abcbabcba(2)bbbb的最长回文子串是其本身这里给出DP算法,其属于区间动态规划。代码#include #include
2013-07-23 20:36:27 1059
原创 static对象
static对象:一旦被创建,就一直存在,直到程序退出。根据静态对象的位置不同,可以分为两类:non-local static object与local static object具体来说:local static object:指函数中用static修饰符修饰的object生命期起始时间:在函数第一次调用时构造初始化。生命期终止时间:程序结束non-local stati
2013-07-23 20:03:40 4277
转载 BOOST的Singleton模版详解(转载)
好文章,转载于fullsail博客:BOOST的Singleton模版详解首先要说明,这个准确说并不是BOOST的singleton实现,而是BOOST的POOL库的singleton实现。BOOST库中其实有若干个singleton模版,这个只是其中一个。但网上大部分介绍的介绍的BOOST的Singleton实现都是这个,所以大家也就默认了。而且这个的确算是比较特殊和有趣的一个实现。
2013-07-23 17:42:39 1106
原创 每天一题(48) - C++实现Singleton模式
饿汉模式代码(1)//.h文件class Singleton{public: static Singleton& GetInstance();private: Singleton(){} Singleton(const Singleton&);private: static Singleton m_Instance;};//CPP文件Singleton Singl
2013-07-22 19:37:48 5290 2
原创 每天一题(47) - 旋转单词顺序 + 左旋转字符串 + 右旋转字符串
题目来自剑指Offer题目(1)思路:假设句子中的三个单词为XYZ,则我们要求的是ZYX。给出字符串的转置性质:可以推出:思路一:则可以先对句子中的所有单词进行转置,之后再进行(句子)整体转置。思路二:先进行句子转置,后对每一个单词转置,也是可以的。代码:根据思路二写的:先对句子进行转置,之后对单词进行转置。#include #
2013-07-20 17:44:43 1569
原创 每日一题(46) - 不能被继承的类
题目来自剑指Offer题目:使用C++设计一个不能被继承的类思路:(1)防止子类调用自己的构造函数和析构函数。注意:不能影响自己创建和销毁对象。方法:把构造函数和析构函数设置为私有函数 + 新增俩方法创建对象和销毁对象原因:(1)把构造函数和析构函数设置为私有函数 :防止子类调用构造函数函数和析构函数,防止继承(2)新增俩方法创建对象和销毁对象:为了不影响自己创建和
2013-07-18 17:35:23 1125
原创 每日一题(45) - 数组中的逆序对
题目来自剑指Offer题目:举例:思路:方法(1):暴力方法:对于数组中任意两个数,均做一次判定,判断是否为逆序对。时间复杂度:O(n^2)。方法(2):类似于归并排序。(1)首先把数组分成两个长度均等的数组(2)分布对这两个数组排序(小到大)。(3)之后再求逆序对,同时对把这两个数组合并到一个数组时间复杂度为O(nlogn)为什么这
2013-07-18 11:35:48 1358 1
原创 每日一题(44) - 第一个只出现一次的字符
题目来自剑指Offer题目1:思路:建哈希,检测字符串代码:void FindChar(const char* pStr){ assert(pStr); int Hash[256]; int nLen = strlen(pStr); memset(Hash,0,sizeof(int) * 256); for (int nCur = 0;nCur < nLen;
2013-07-17 17:15:03 801
原创 每日一题(43) - 丑数
题目来自剑指Offer题目:题目换句话说:丑数就是连续除以2,3,5,之后商为1的数.代码:bool IsUglyNum(int nNum){ //消除因子2 while (nNum % 2 == 0) { nNum /= 2; } //消除因子3 while (nNum % 3 == 0) { nNum /= 3; } //消除因子5 whi
2013-07-17 16:43:48 852
原创 聪明的“KK”
一个小动物“KK”正从沙漠区域(矩形)的左上角沿着向右或向下的方向往右下角跑去。KK太聪明了,它居然能在跑的过程中会选择吃掉尽可能多的虫子线路。你知道它吃掉多少虫子吗?【标准输入】第一行:N M 表示沙漠是一个N*M的矩形区域接下来有N行:每行有M个正整数,Xi1 Xi2 ……Xim 表示各位置中的虫子数(单个空格隔开)【标准输出】输出有一个整数
2013-07-17 09:00:23 1502
原创 每日一题(42) - 二叉树中和为某一值的路径
题目来自剑指Offer题目:代码:#include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};void FindPath(BinaryTreeNode* pRoot
2013-07-16 21:42:16 998
原创 每日一练(41) - 二叉搜索树的后序遍历序列
题目来自剑指Offer题目:思路:能满足下面思路的就是,不能满足的就不是。可以递归处理。代码:#include #include using namespace std;bool IsBST(int nArr[],int nStart,int nEnd){ if (nStart > nEnd) { return true; } if (nStar
2013-07-16 20:47:59 762
原创 每日一练(40) - 判断二叉树是否是一颗平衡二叉树
题目来自剑指Offer题目:思路:类似后序遍历,同时要判断左右子树是否为平衡二叉树。代码:#include #include using namespace std;const int SIZE = 100;struct BinaryTreeNode { char m_nValue; BinaryTreeNode* m_pLeft; BinaryTr
2013-07-16 20:13:27 816
原创 每日一练(39) - 二叉树的深度
题目来自剑指Offer题目:求二叉树的深度代码#include #include using namespace std;const int SIZE = 100;struct BinaryTreeNode { char m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};int Dept
2013-07-16 19:39:13 872
原创 每日一练(38) - 从上往下打印二叉树(二叉树的层次遍历)
题目来自剑指Offer题目:层次遍历二叉树代码:#include #include using namespace std;const int SIZE = 100;struct BinaryTreeNode { char m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};void Le
2013-07-16 19:29:00 1457
原创 每日一题(37) - 两个队列实现栈
题目来自剑指Offer题目:两个队列实现栈思路:代码:#include #include using namespace std;const int SIZE = 5;class Queue{public: Queue(); void AddTail(int nData); int RemoveHead(); bool IsFull(); bool IsE
2013-07-16 17:21:04 804
原创 每日一题(36) - 用两个栈实现队列
题目来自剑指Offer题目:思路:代码:#include #include using namespace std;const int SIZE = 5;class Queue{public: Queue(); void AppendTail(int nData); int RemoveHead(); bool IsEmpty(); bool Is
2013-07-15 17:37:03 904
原创 每日一题(35) - 栈的压入、弹出序列(验证出栈序列是否合法)
代码#include #include using namespace std;bool IsPopOrder(int nArrPop[],int nArrPush[],int nLen){ assert(nArrPop && nArrPush && nLen > 0); int* Stack = new int[nLen]; int nTop = -1; int nCurP
2013-07-14 21:53:19 1482
原创 每日一题(34) - 包含最小值Min函数的栈
题目来自剑指offer题目思路:除了栈的基本结构以外,另外维护一个数组保存最小值代码#include #include using namespace std;class Stack{public: Stack(); int Pop(); void Push(int nData); int Min();private: int m_nTop; in
2013-07-14 17:28:48 1059
原创 每日一题(33) - 树的子结构
题目来自剑指offer题目:举例:思路:以先序的顺序对树进行处理,先比较子树的根值是否匹配,之后再比较其两个子树是否匹配代码:#include #include using namespace std;struct BinaryTreeNode{ char m_nValue; BinaryTreeNode* m_pLeft; BinaryTr
2013-07-13 11:15:18 2840 1
原创 KMP算法(未完待续)
KMP算法由Knuth、Morris、Pratt三位前辈提出来的,取了这三个人的名字的头一个字母。用途:用于处理字符串匹配,判断主串是否包含模式串。举例:匹配的结果:返回匹配的下标5思想:每当一趟匹配过程中出现字符比较不等时,不需回溯主串指针,而是利用已经得到的部分匹配的结果,将模式串向右滑动尽可能远的一段距离后,继续进行比较,而尽可能地减少比较次数。与朴素
2013-07-12 21:35:48 1121
原创 每日一题(32) - 顺时针打印矩阵 和 螺旋矩阵
题目来自剑指offer题目:思路:每次打印一个环根据上图,打印环时,可以分为四步:(1)打印1,只要环存在,就该行就可以打印。(2)打印2,只要环有多行(有待打印的元素)时,才可以打印。(3)打印3、当环有多行(和其一次行区分开)+有多列(有待打印的元素)时,才有可能打印该行(4)打印4、当环有多列(和其一次列区分开)+有多行(有待打印的元素)时
2013-07-12 10:44:41 1061
转载 分析搜索引擎如何判断网页是否重复
搜索引擎判断重复性网页一般都基于一个思想:为每个网页计算出一组“DNA”,若两个网页有一定数量相同的DNA段,则认为这两个网页的内容重叠性很高,也就是说两个网页内容是相同的。每个搜索引擎判断重复性内容的方法都不太一样,主要是以下两点的不同:1、计算信息指纹算法;2、判断信息指纹的相似程度的参数。在描述具体的算法前,先说清楚两点:1、什么是信息指纹?信息指纹就是把网页里面正文
2013-07-11 23:02:58 1734
原创 每日一题(31) - 二叉树的镜像
题目来自剑指offer题目:举例:思想:先序遍历二叉树,每遍历一个结点时,都交换两个子树。代码:void MirrorRecursive(BinaryTreeNode* pRoot){ if (NULL == pRoot || (NULL == pRoot->m_pLeft && NULL == pRoot->m_pRight)) { return
2013-07-11 20:15:24 1042
转载 本次找工作有感,挺有用的!!!
转自CSDN论坛,作者long007007,本次找工作有感,谢谢作者的分享。说说这次找工作的一些经历吧。4月初离职到现在差不多大半月的时间,终于找到工作了,待遇和我理想的12K左右差不多,最终在14K的样子。用到终于这个词,大家也能猜到这次的求职并不太顺利。总结下吧,算是给各位还在找工作的同学一点经验。1、准备充分我这次找工作准备的特别不充分,可以说在第一次面试的时候都没正真意义的准备
2013-07-11 13:09:00 2480 1
原创 每日一题(30)- 斐波那契数列以及应用
题目来自剑指offer题目:说明:形成的斐波那契数列为:0,1,2,3,5,8...思路:可以直接使用递归,但是有重复子问题。可以使用迭代。递归代码:long Fibonacci(unsigned int n){ if (n == 1) { return 1; } if (n == 2) { return 2; } return Fibo
2013-07-10 20:25:30 1641
原创 每日一题(29) - 重建二叉树
题目来自剑指Offer题目:思路:根据前序遍历找出根,根据中序遍历找出左右子树区间。逐步缩小区间,直到树建立完成注意:在两个数组中在计算左右子树的区间时,需要通过记录子树中结点的个数获得。代码:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_p
2013-07-10 17:02:04 840
原创 每日一题(28) - 找出绝对值最小的元素
题目来自网上题目:给出一个递增数组,找出绝对值最小的元素思路:在数组中二分找0代码:#include #include using namespace std;int BinSearch(int nArr[],int nStart,int nEnd){ assert(nArr != NULL && nStart >= 0 && nEnd >= nStart); int
2013-07-10 11:35:28 1001
原创 每日一题(27) - 旋转数组的最小数字
题目来自剑指offer题目:思路:根据指针low,mid,high三个指针指向元素的大小确定二分往左走还是往右走如果arr[low] 如果arr[low] > arr[mid]: 则区间[low,mid]的元素是有递增有递减,则应该往左走终止条件:区间只剩两个元素时,终止。此时该区间肯定值一个大一个小(high指向),此时返回high指向元素即可注意:有一
2013-07-10 11:12:19 773
原创 每日一题(26) - 数组元素重排
题目来自网上题目:给定一个数组arr,其中包括0元素和非0元素,要求对数组元素进行重新排序要求:1、所有0元素在左,所有非零元素在后,且非零元素在重排前后相对位置不变2、时间复杂度为O(n),空间复杂度O(1)举例:原始数据:0、1、2、0、3输出数据:0、0、1、2、3思路:不能像快排一样移动,那样元素顺序会打乱。为了防止数据被打乱,可以从右端开始处理代码
2013-07-09 21:45:15 1097
原创 每日一题(25) - 使数组中的奇数在前偶数在后
题目来自网上题目:已知一个整数数组,写一个程序使其中的奇数在前偶数在后。思路:类似快速排序的一次划分。代码:void Divide(int nArr[],int nStart,int nEnd){ assert(nArr != NULL && nStart >= 0 && nEnd >= nStart); int tmp = 0; while (nStart < nEnd)
2013-07-08 19:46:05 1085
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人