自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(197)
  • 资源 (2)
  • 收藏
  • 关注

原创 最小的k个数

1,问题:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。2,想法:(1),直接排序,然后选取前k个最小的数,时间o(nlogn)(2),采用冒泡排序的思想,最外层for循环为k,时间复杂度为O(kn)(3),采用快速排序中Partition的方法,找到第k大数字的位置,然后输出前k个数字。时间o(n

2016-04-03 16:43:50 383

转载 c++ STL中的set和multiset的使用

转载地址:http://blog.csdn.net/hnust_xiehonghao/article/details/7942541C++ STL set和multiset的使用std::set s;那个s这个对象里面存贮的元素是从小到大排序的,(因为用std::less作为比较工具。)1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,

2016-04-02 22:16:27 1960

转载 STL学习笔记

转载地址:http://www.cnblogs.com/luxiaoxun/archive/2012/12/05/2803136.html#.string 建议  使用string 的方便性就不用再说了,这里要重点强调的是string的安全性。      string并不是万能的,如果你在一个大工程中需要频繁处理字符串,而且有可能是多线程,那么你一定要慎重(当然,在多线程下

2016-04-02 22:03:32 390

原创 剑指offer面试题之判断二叉搜索树的后序序列

1,问题:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。2,想法:后序序列的最后一个结点为根节点,根节点的左孩子树都比它小,右孩子树都比它大,所以可以根据最后一个结点把序列分成两个部分,分成两个部分后又可以继续递归判断。而递归的出口是,当递归到序列中只有一个孩子时,返回true,当当前根节点

2016-04-02 18:26:46 369

原创 剑指offer面试题之字符串的排列

1,输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 2,想法:就是写一个全排列,另外再得到所有的全排列之后要有一个排序操作!不过还要注意的一个点是不能重复,比如字符串"aa",不能两次输出aa。3,编码:class Soluti

2016-04-02 16:41:57 534

转载 sizeof()计算一个类的对象大小和sizeof(string)的问题

http://blog.csdn.net/vangoals/article/details/4264512关于类的大小sizeof()的计算首先,来看看一个只有构造函数和析构函数的空类:[cpp] view plaincopy#include   using namespace std;  class Ba

2016-04-02 15:02:03 1363

原创 剑指offer面试题之左旋转字符串

1,问题:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!2,想法:看例子后,想到反转,先反转左边部分得到,cbaXYZdef,再旋转右边部分

2016-04-01 10:59:52 349

原创 剑指offer面试题之把数组排成最小的数

1,问题:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。2,想法:(1),最直接的做法是求出这个数组数字的全排列,然后把每个排列拼起来,求最后最小的值,这种情况需要考虑n!中情况,不好!(2),另外需要考虑的一个问题是大数问题,因为单个数字不会超过数字表示范

2016-03-30 17:11:02 457

转载 qsort函数、sort函数 (精心整理篇)

先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的。首先说一下, qsortqsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定)。集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题。所谓三路划分,是指把数组

2016-03-30 15:06:34 340

原创 剑指offer面试题之求第n个丑数

1,问题:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。2,想法:我们先看下丑数的定义:所谓丑数,就是不能被2,3,5以外的其他素数整除的数。1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。(1不是素数)(1),就是写

2016-03-29 21:58:05 6374

原创 剑指offer面试题之求1到n之间1的个数

1,问题:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。2,想法:(1),例如给定一个真整数n,求1到n中1的个数,例如给定12,那么有1,10,1

2016-03-29 20:39:26 534

转载 C/C++中const关键字详解

为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下:  常变量:  const 类型说明符 变量名  常引用:  const 类型说明符 &引用名  常对象:  类名 const 对象名  常成员函数:  

2016-03-29 15:37:04 288

转载 C/C++中volatile关键字详解

1. 为什么用volatile?    C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler th

2016-03-29 15:14:44 306

原创 剑指offer面试题之求两个链表的第一个公共点

1,问题:输入两个链表,找出它们的第一个公共结点。(现在只考虑都是无环的)2,想法(1),先求出两个链表的长度,用两个指针,长链表的指针先走长度之差那么多步,然后两个指针一起走,遇到指针相同的就返回。(2),遍历两个链表,把指针入栈,然后再同时出栈,若遇到不相同的则返回上一个相同的栈元素。3,编码为:/*struct ListNode { int val; str

2016-03-27 12:19:01 428

原创 剑指offer面试题之栈的压入、弹出序列

1,问题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。2,想法:既然是关于栈,首先想到栈的应用,用一个辅助栈,当栈空时,从进栈序列中进一个,判断栈顶元素是否与出

2016-03-26 18:01:27 336

转载 每天一题(48) - C++实现Singleton模式

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。应用场景:比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。其他还有如系统的日志输出、MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管

2016-03-24 16:19:34 451

转载 c/c++中静态局部变量以及全局变量的使用(转)

c/c++中的变量分为全局变量和静态全局变量,局部变量和静态局部变量。本文主要讲静态局部变量。静态局部变量首先是一个局部变量,加上静态后,生存期就被延长了,不会随着函数的返回而被撤销,我们可以这样理解,静态局部变量就是程序生存期间一直有效,但只能在定义它的函数中使用的一种变量。静态局部变量的声明比较简单,在声明局部变量的时候,加上关键字static就可以了。下面是一个用局部静态变量

2016-03-24 16:10:26 1518

原创 求1加到n的发散思维方法

方法1:运用构造函数,#include "stdafx.h"#include using namespace std;//构造函数法,利用static的特性//类的静态成员变量被所有对象共享class temp{private: static int num; static int sum;//声明两个静态变量 //定义一些公有函数来操纵它们public: static

2016-03-23 21:17:10 967

转载 CString/string 区别及其转化

CString/string 区别及其转化利用MFC进行编程时,我们从对话框中利用GetWindowText得到的字符串是CString类型,CString是属于MFC的类。而一些标准C/C++库函数是不能直接对CString类型进行操作的,所以我们经常遇到将CString类型转化char*等等其他数据类型的情况。这里总结备忘于此!首先要明确,标准C中是不存在string类

2016-03-23 20:40:04 288

转载 C++之string类型详解

from:http://citycowboy.blog.sohu.com/50058804.html之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个泛型类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单

2016-03-23 20:24:41 3925

转载 C/C++位运算技巧

预备知识对于位运算,大家都很熟悉,基本的位操作有与、或、非、异或等等。在面试中经常会出现位运算相关的题,所以我就做了简单的整理,参考了很多写的很好的博客及书籍。现在简单说一下,移位运算。左移运算:x 右移运算:x >> y。将x右移y位,这需要区分x是有符号数还是无符号数。在x是无符号数时,只需将x的最右边的y位丢弃,在左边补上y个0。在x是有符号数时,又分为x是正

2016-03-23 16:30:22 412

转载 程序员面试题精选100题(63)-数组中三个只出现一次的数字[算法]

题目:一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。分析:在博客http://zhedahht.blog.163.com/blog/static/2541117420071128950682/中我们讨论了如何在一个数组中找出两个只出现一次的数字。在这道题中,如果我们能够找出一个只出现一次的数字,剩下两个只出现一次的数字就很容易找出来了。如果我们

2016-03-23 16:10:28 430

转载 程序员面试题精选100题(34)-数组中只出现一次的数字[算法]

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我

2016-03-23 16:07:32 483

转载 面试题:看数字找规律

第一种----等差数列:是指相邻之间的差值相等,整个数字序列依次递增或递减的一组数。1、等差数列的常规公式。设等差数列的首项为a1,公差为d ,则等差数列的通项公式为an=a1+(n-1)d (n为自然数)。  [例1]1,3,5,7,9,(    )   A.7    B.8   C.11    D.13  [解析] 这是一种很简单的排列方式:其特征是相邻两个数字之间的差是一个常数。

2016-03-23 16:04:03 6350 1

原创 输入一个链表,输出该链表中倒数第k个结点。

1,问题:输入一个链表,输出该链表中倒数第k个结点。2,想法都在代码里标注了:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthT

2016-03-22 13:19:50 428

原创 剑指offer面试题之变态跳台阶

1,一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。2,想法:肯定有规律可以找:由条台阶的问题想到递归的思想:这里n个台阶,青蛙在最后一次跳的情况有n种。用f(n)表示n个台阶时青蛙跳的种数。那么有f(n) = f(n-1) + f(n-2) + .......+ f(1) + f(0);其中f(0)表示青蛙一次跳n

2016-03-22 10:57:59 443

原创 图数据集格式转换

1,比如图数据集格式如下:12 241 2 1 31 41 93 83 12........2,我想转换为如下这种格式12 241 4 2 3 4 93 3 9 8 12.......3,转换思想:先读进来存储后再写出去#pragma once#include using namespace std;class Node{pub

2016-03-21 22:31:51 548

原创 KMP算法实现

1,前边转载的关于求next数组的文章对next讲解已经比较清楚了。这里只实现代码以及比较一下与数据结构上next数组的异同。2,实现KMP算法时的关键点是计算next数组以及在求出next数组后,与主字符串匹配过程中,偏移量的更新和模式串指标的更新。特别当求出一个匹配后,模式串指标的更新应该和前边一样,与next数组有关,而不应该直接置为0,因为若置为0会丢失匹配,例子:主串:abc

2016-03-21 17:28:36 478

原创 剑指offer面试题之调整数组顺序奇数在偶数之前

1,问题:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2,想法:(1),从头往后扫描,遇到交换情况就交换,但需要移动来保持相对位置不变。(2),设置辅助空间,扫描原数组,遇到偶数存在辅助空间中,遇到奇数就覆盖原数组的前段,最后再把辅助空间中的数赋值给原

2016-03-20 21:03:41 367

原创 剑指offer面试题之跳台阶

1,问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。补充下:当只有一个台阶时,青蛙不能跳2级。2,代码及思想:class Solution {public: //下边的代码,递归太多次了,运行时间不满足 //蠢死了!!! //又没从宏观上把握,一遇到题就瞎下手! /*int Com(int n,

2016-03-20 18:57:13 314

原创 剑指offer面试题之用两个栈实现队列

1,问题:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。2,想法:(1),初始想法:push时,就用stack1进栈;Pop时,先把stack1的值出栈,同时入栈stack2,然后再去stack2栈顶元素,再出栈。再把stack2中元素出栈,同时入栈stack1,即回到Pop前状态!(2),在(1)的基础上有个改进点,那就是当sta

2016-03-20 16:37:10 360

原创 剑指offer面试题之从头到尾打印链表

1.问题:输入一个链表,从尾到头打印链表每个节点的值。 2,思考:(1),笨方法:从头到尾扫描一遍,改变next指针,变成逆向。再扫描一遍改变后的链表,把值放入一个vector中,返回。(2),既然是从尾到头输出,即逆序输出,即从底到上输出,而递归恰好有自底至上的性质,适应这里。3,在牛客网上的编码为:/*** struct ListNode {*

2016-03-20 16:10:44 720

转载 后缀树系列二:线性时间内构建后缀树(包含代码实现)

上一篇文章已经介绍了后缀树的前前后后的知识,并且采用各种技巧逼近线性时间了,至于具体怎么操作大家看完之后应该多多少少有点想法了。而之所以将本文跟上一篇文章分开,主要考虑有三:第一,和在一起文章就会太长了,看的头疼。第二,理论跟实现本来就有差异,本文中一些具体实现并没有严格遵守上文中的条条框框。当然了,主题思想是一样的。第三,本文会从具体实现的角度,在实现过程中进一步阐述上文中的原理。换个角

2016-03-20 11:18:07 1404

转载 (转)从实现角度介绍如何线性时间建立后缀树

The following is an attempt to describe the Ukkonen algorithm by first showing what it does when the string is simple (i.e. does not contain any repeated characters), and then extending it to the full

2016-03-20 11:11:51 403

转载 后缀树系列一:概念以及实现原理( the Ukkonen algorithm)

首先说明一下后缀树系列一共会有三篇文章,本文先介绍基本概念以及如何线性时间内构件后缀树,第二篇文章会详细介绍怎么实现后缀树(包含实现代码),第三篇会着重谈一谈后缀树的应用。 本文分为三个部分,首先介绍一下后缀树的“前身”-- trie树以及后缀树的概念;然后介绍一下怎么通过trie树在平方时间内构件后缀树;最后介绍一下怎么改进从而可以在线性时间内构件后缀树;一,从tri

2016-03-20 11:09:59 4948

转载 KMP算法的前缀next数组最通俗的解释,如果看不懂我也没辙了

我们在一个母字符串中查找一个子字符串有很多方法。KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度。当然我们可以看到这个算法针对的是子串有对称属性,如果有对称属性,那么就需要向前查找是否有可以再次匹配的内容。 在KMP算法中有个数组,叫做前缀数组,也有的叫next数组,每一个子串有一个固定的next数组,它记录着字符串匹配过程中失配情况

2016-03-20 11:06:29 746

原创 剑指offer面试题之替换空格

1,问题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。2,想法:(1),扫描一遍计算空格的个数,再计算替换所需要的空间,申请一个临时数组,把替换后的数值保存在临时数组中,再把str指针指向临时数组;(2),参数length与str的实际长度无关,str里有一些未定义的空

2016-03-19 21:46:13 346

转载 c++中的左移、右移运算

移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。   c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:1、如果是无符号数

2016-03-19 20:02:49 807

原创 剑指offer面试题之求一个整数二进制中1的个数

1,问题:二进制中1的个数2,想法:(1),笨方法,把整数的二进制求出来,再遍历。//递归输出二进制函数  void BinaryRecursion(int n)  {   int a;   a=n%2;   n=n〉〉1;   if (n==0)    ;   else    BinaryRecursion(n);   cout〈〈a;

2016-03-19 20:00:03 549

原创 剑指offer面试题之和为S的两个数字

1,题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 2,想法:(1),暴力枚举法,需要考虑每一对数,而且需要比较乘积以及记录位置,麻烦!(2),利用递增排序的思想以及和相等的两个数,离得越远,两数乘积越小。3,在牛客网上的编码为:class Solution {public:

2016-03-19 17:27:29 464

Kruskal实现最小生成树代码

Kruskal实现最小生成树,其中用并查集判别一条边是否是在同一连通分量中!

2015-10-29

xml关键字查询求SLCA代码

是对论文Efficient Keyword Search for Smallest LCAs in XML Databases的部分实现!

2015-10-29

空空如也

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

TA关注的人

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