自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

思考,思考,再思考~

每天学习一个新知识,写一个小程序...

  • 博客(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

基于链表的快排,只改变结点内容,但不改变链表指向

基于链表的快排,只改变结点内容,但不改变链表指向 C++实现

2013-09-11

c++实现基于链表的快排,改变链表指向,不改变结点指针

基于链表的快排,改变链表指向,不改变结点指针、c++代码

2013-09-11

C++写的各种QSort

C++写的各种QSort,还有效率对比代码..

2012-07-29

空空如也

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

TA关注的人

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