自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (5)
  • 收藏
  • 关注

原创 剑指offer 53-正则表达式匹配

题目:请实现一个函数用来匹配包含‘.’和‘*’的正则表达式。模式中的字符'.'表示任意一个字符,而‘*’表示它前面的字符可以出现任意次(含0次)。本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串“aaa”与模式“a.a”和“ab*ac*a”匹配,但与“aa.a”及“ab*a”均不匹配。  分析:如果模式中的字符ch是‘.’,那么它可以匹配字符串中的任意字符。如果模式中的字

2015-06-28 17:12:35 321

原创 剑指offer 54-表示数值的字符串

题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。123.45e+6#includeusing namespace std;void scanDigits(ch

2015-06-28 16:20:37 395

原创 剑指offer 55-字符流中第一个不重复的字符

与字符串中稍有不同,同样用hash表#include#includeusing namespace std;class CharStatistics{public: CharStatistics():index(0) { for(int i=0;i<256;i++) occurrence[i]=-1; } void Insert(char ch) { if

2015-06-28 14:47:01 303

原创 剑指offer 67-机器人的运动范围

回溯法#includeusing namespace std;int GetDigitSum(int num){ int s=0; while(num) { s += num%10; num = num/10; } return s;}int movingCountCore(int threshold,int rows,int cols,int row,i

2015-06-28 11:45:15 393

原创 剑指offer 66-矩阵中的路径

回溯法#includeusing namespace std;bool hasPathCore(char *matrix,int rows,int cols,int row,int col,char *str,int &pathLength,bool *visited){ if(str[pathLength]=='\0') return true; bool hasPa

2015-06-28 11:16:02 293

原创 剑指offer 64-数据流中的中位数

1.使用algorithm,最大堆最小堆 vector左边最大堆,右边最小堆,#include#include#includeusing namespace std;template class DynamicArray{public: void Insert(T num) { if(((max.size()+min.size())&1)==0) {

2015-06-28 10:02:16 267

原创 static

1、什么是static?       static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。2、为什么要引入static?       函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?

2015-06-27 10:06:49 370

原创 剑指offer 48-不能被继承的类

//方法1 把函数构造设为私有函数class sealedClass{public: static sealedClass* GetInstance() { return new sealedClass(); } static void deleteInstance(sealedClass* pInstance) { delete pInstance; }private

2015-06-27 09:41:36 273

原创 剑指offer 47-不用加减乘除做加法 交换

加法:异或   相与#includeusing namespace std;//加法int Sum(int a,int b){ int sum,carry; do { sum = a^b; carry = a&b; a = sum; b = carry; }while(b!=0); return a;}//交换void Swap(int &a,in

2015-06-26 22:22:51 268

原创 (重要)剑指offer 46-求1+2+..N

题目:求1+2..+N,要求不能使用乘除法、for/while/if/else/switch/case等关键字及条件判断语句(A?B:C)方法1: 利用构造函数,static ,构造n个实例。方法2:利用虚函数求解。当n不为0时,调用函数Base::Sum() ,当n为0时,调用函数Derived::Sum()方法3:利用函数指针求解。类似虚函数方法4:利用模板类型求解#inc

2015-06-26 22:09:01 267

原创 剑指offer 45-约瑟夫环

方法1:list 循环方法2: 公式法方法3:链表#include#includeusing namespace std;//方法1int LastRemaining(unsigned int n,int m){ if(n<1 || m<-1) return 0; list numbers; for(int i=0;i<n;i++) numbers.push_b

2015-06-26 20:57:25 366

原创 剑指offer 44-扑克牌的顺子

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。  分析:把大小王定义为0,可以替换任意数字。  首先把数组排序,再统计数组中0的个数,最后统计排序之后的数组中相邻数字之间的空缺总数。          如果空缺的总数小于或等于0的个数,那么这个数组就是连续的;反之则不连续

2015-06-26 16:19:44 260

原创 剑指offer 43-n个骰子的点数

题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。首先解决前提性的问题:一个骰子的点数只可能是[1,6],所以S的值的取值范围是[n,6n],这里当然只考虑整数。 统计各个S值出现的次数,然后       各个S值出现的概率 = 各个S值出现的次数 / n个骰子所有点数的排列数 其中,n个骰子所有点数的排列数等于6n

2015-06-26 14:31:10 369

原创 剑指offer 42 - 翻转单词顺序 左旋转字符串

题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "I am a student",则输出 "student.a am I " 。     首先句子旋转,然后单词旋转题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串 "abcdefg "和

2015-06-25 22:11:58 234

原创 剑指offer 41 - 和为s的两个数字VS为s的连续正数序列

题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。思路整理一下:最初我们找到数组的第一个数字和最后一个数字。首先定义两个指针,第一个指针指向数组的第一个(也就是最小的)数字,第二个指针指向数组的最后一个(也就是最大的)

2015-06-25 20:27:39 596

原创 剑指offer 40-数组中只出现一次的数字

1.题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字通过这道题感觉位运算很强大~这道题利用异或的几个性质:任何数与其本身异或值都为0,异或运算满足交换律。因此将一组数依次异或,若里面只有一个只出现一次的数,其他的数都出现两次,则最后的结果必然是那个只出现一次的数。要找到两个数字就可以先通过异或整个数组,将得到的结果分组。然后依次安组异或就可以得到

2015-06-25 19:32:07 282

原创 剑指offer 39-二叉树的深度 判断二叉树是否为平衡二叉树

方法1:得到左右子树的深度,判断方法2:存储节点深度,边遍历边判断#includeusing namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};BinaryTreeNode* CreateBinaryTreeNode

2015-06-25 17:09:08 214

原创 设计模式 1-简单工厂模式

1.using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SimpleFactory{ class Program { static void Main(string[] args) {

2015-06-25 15:35:30 272

原创 剑指offer 38-数字在排序数组中出现的次数

利用二分查找的思想,分别找出第一次和最后一次出现的位置,然后相减得到出现次数#includeusing namespace std;// 找到数组中第一个k的下标。如果数组中不存在k,返回-1int GetFirstK(int *data, int length,int start ,int end ,int k){ if(start > end) return -1;

2015-06-24 17:20:11 473

原创 剑指offer 37 - 两个链表的第一个公共节点

首先遍历得到两个链表的长度,得到差值dif,较长的链表先移动dif步,然后同时在两个链表上便利,第一个相同的结点就是第一个公共结点#includeusing namespace std;struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *CreateListNode(int value){ Li

2015-06-24 16:09:07 285

原创 剑指offer 36 - 数组中的逆序对

题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,有一个数组为Array[0..n] 其中有元素a[i],a[j].如果 当ia[j],那么我们就称(a[i],a[j])为一个逆序对。在数组{7,5,6,4}中一共存在5对逆序对,分别是(7,6),(7,5),(7,4),(6,4),(5,4)。跟归并排

2015-06-24 14:48:34 273

原创 剑指offer 35-第一次只出现一次的字符

使用hash表,存储字符出现次数,然后扫描出现次数为1的字符#includeusing namespace std;char FirstNotRepeatingChar(char *str){ if(str==NULL) return '\0'; const int tableSize=256; int table[tableSize]; for(int i=0;

2015-06-24 10:55:16 302

原创 剑指offer 34- 丑数

只包含因子2/3/5的数称为丑数。方法1:逐个判断每个整数是不是丑数方法2:创建数组保存已经找到的丑数,用空间换时间的方法每一个丑数都是前面的丑数乘以2、3、5得到的                已有丑数中最大丑数为M,下一个丑数应该是已知丑数分别乘以2、3、5的第一个大于M的数,记录,每个乘以2、3、5第一个大于M的位置更新。#includeusing namespace

2015-06-24 10:33:53 251

原创 剑指offer 32-从1到n整数中1出现的次数

我们把从1到21345的所有数字分成两段,即1-1345和1346-21345。先来看1346-21345中1出现的次数。1的出现分为两种情况:一种情况是1出现在最高位(万位)。从1到21345的数字中,1出现在10000-19999这10000个数字的万位中,一共出现了10000(104)次;另外一种情况是1出现在除了最高位之外的其他位中。例子中1346-21345,这20000个数字中

2015-06-23 20:24:26 398

原创 剑指offer 31 - 连续子数组的最大和

时间复杂度为O(N)。不断的累加每个数组元素,并用一个变量保存当前的最大值,累加的过程一直和该变量进行比对,如果大于最大值,就把当前的最大值保存下来,反复如此就可以求出最大值.#include #include #include using namespace std;bool g_inputNumInvalid = false;int FindMaxSum(int *num ,i

2015-06-23 16:41:44 214

原创 剑指offer 30 - 最小的k个数

方法1: O(n)类似于快速排序,如果基于数组的第k个数字来调整。位于数组中左边的k个数字就是最小的k个数字方法2:O(nlog(k)),适合海量数据。先保存k个数,然后拿k个数中的最大值大于数组中下一个值比较,若最大值大于数组中下一个值,则删除并插入数组中的值。因为要删除最大元素首先想到用最大堆,但是还需要插入操作,可以用最大堆或红黑树实现,                STL 中

2015-06-23 16:07:43 263

原创 剑指offer 29 - 数组中出现次数超过一半的数字

方法1:加入数组排序后,那么中间的数字一定是出现次数超过一半的数字。             首先在数组中随机选择一个数字,然后调整数字的顺序,使得比选中数字小的在它的左边,比它大的在它的右边(一次parition)                       如果这个选中的数字的下标正好是n/2,那么这个数字就是中位数                       如果这个下标大于n/

2015-06-23 14:51:55 261

原创 剑指offer 28- 字符串的排列

1.书上#include#includeusing namespace std;void Permutation(char* pStr, char* pBegin){ if(*pBegin == '\0') { cout<< pStr<<endl; } else { for(char* pCh = pBegin

2015-06-19 22:05:04 284

转载 [C++]数据结构:最大堆MaxHeap的创建与使用

首先先介绍一下最大树的概念。最大树是每个节点的值都要大于或等于其子节点的值的树。而最大堆就是最大的完全二叉树。因为最大堆是完全二叉树,所以拥有n个元素的堆的高度为[log2(n+1)]。因此如果可以在O(height)的时间内完成插入和删除操作,则其复杂度为O(log2n)。下面是一个最大堆的图例。这里的第一层和第二层是标记第几层子节点,并不是树的第几层。

2015-06-18 09:55:52 1314

原创 剑指offer 27 - 二叉搜索树与双向链表

一、问题描述输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。二、实现思路在二叉搜索树中,每个结点都有两个分别指向其左、右子树的指针,左子树结点的值总是小于父结点的值,右子树结点的值总是大于父结点的值。而在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个

2015-06-17 22:17:42 397

原创 剑指offer 26 - 复杂链表的复制

题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下: struct ComplexNode{    int m_nValue;    ComplexNode* m_pNext;    ComplexNode* m_pSibling;};

2015-06-17 21:11:12 316

原创 编程题

1.原题:有20个数组,每个数组里面有500个数,升序排列,求出这10000个数中最大的500个,求复杂度。算法实现:为简化,设有5个数组,每个数组里面有10个数,升序排列,求出50个数中最大的5个数。通过分析不难求出要充分利用每个数组是升序排列。因此,我们可以从每个数组中取各自数组中的最大数,由此,得到一个数组,该数组中的元素有20个。接下来,需要对这20个数字求出最大值,如果利用冒泡或者选

2015-06-17 18:41:42 340

原创 多线程 handle

#include #include using namespace std;DWORD WINAPI Fun1(LPVOID lpParameter);DWORD WINAPI Fun2(LPVOID lpParameter);int index = 0;int tickets = 100; //全局变量tickets用来表示销售的剩余票数HANDLE hMutex;int

2015-06-16 09:54:28 443

原创 剑指offer 20 - 顺时针打印矩阵

1.顺时针打印,分为几圈:columns>=start*2 && rows>=start*2)  2.每一圈读取时,第一步由左到右,第二步由上到下,第三步有右到左,第四步由下到上。后三步读取前加判断条件                      #include using namespace std;void printMatrixInCircle(int **numbers,

2015-06-15 22:18:29 282

原创 剑指offer 14 - 调整数据顺序使奇数位于偶数前面

1.设定两个指针p1,p2: p1初始指向第一个元素,p2指向第二个元素2.p1向前直到指向偶数,p2向前直到指向奇数,若p1p2停止3.函数指针#include using namespace std;bool isEven(int n){ return (n & 1)==1; //偶数返回1}void Recorder(int *data, unsigned

2015-06-15 17:21:36 286

原创 剑指offer 12 -打印1到最大的n位数

注意点:(1)n很大,溢出,采用字符串表示数                  (2)如何判断每一次增加1后是不是到了最大的n位数#includeusing namespace std;// 方法1bool Increment(char *number){ int nTakeOver =0; int nLength=strlen(number); for(int

2015-06-14 16:54:25 285

原创 剑指offer 11 - 数值的整数次方

注意点:(1)在求3^32时,可以先平方,然后四次,8次,16次,32次,采用递归                 (2)两个小数比较是否相等  abs(result - expectedResult)                    (3)unsigned int   和  int                   (4)设置全局变量表示输入数据正确与否#include

2015-06-14 15:11:13 275

原创 程序员面试宝典 10- 面向对象

1.程序运行到哪一步出错#includeusing namespace std;struct Test{ Test(int){} Test(){} void fun(){}};int main(){ Test a(1); a.fun(); Test b(); //此处错误但可以编译 b.fun(); //此处编译不通过}2.class Test{public

2015-06-12 21:37:11 535

原创 程序员面试宝典9 -STL模板与容器

1.#include#includeusing namespace std;void print(vector v){ cout<<v.size()<<endl; for(vector::iterator iter =v.begin();iter!=v.end();iter++) cout<<*iter<<" "; cout<<endl<<endl;}int sum(v

2015-06-11 20:50:27 424

转载 C++ 三大函数该写就要写

记得C++ 沉思录上说过,如果数据成员有指针类型的,最好把三大函数补全,不然的话容易产生浅拷贝和内存泄露。这里给出一个简单的例子。#include #include #include #include using namespace std;class CDemo{public: CDemo():str(new char[1]) {

2015-06-11 19:07:00 346

kafka中文文档0.10.pdf

kafka中文文档0.1阅读笔记 ,其中介绍了kafka的底层存储

2017-11-26

spring-mvc maven IDEA

spring-mvc maven IDEA 亲自编写 可运行

2016-04-17

mybatis基础慕课网

mybatis基础慕课网.zip

2016-01-13

java jsp sql cookie

java jsp sql cookie 源代码,适合初学者

2015-12-16

空空如也

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

TA关注的人

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