自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (4)
  • 收藏
  • 关注

原创 字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解答求字符串的全排列,偷懒用了库函数class Solution {public: vector

2016-02-29 21:22:52 255

原创 138. Copy List with Random Pointer&复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。解答暴力法  可以把复制过程分为两步: 1. 复制原始链表上的每个结点,并用next连接起来 2. 设置每个结点的random指针。   假设原始链表中的某个结点N的random指向结点S,由于S的位置在链表中可能在N的前面,也可能在N的后面,所以要定位S的位置需要从原始链表的

2016-02-29 16:17:52 457

原创 栈的压入、弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。解答  以4,5,3,2,1为例,分析压栈和弹出的过程。第一个希望被弹出的数字是4,因此4需要先压入到辅助栈中。压入栈的顺序由压栈

2016-02-29 09:32:01 377

原创 孩子们的游戏(圆圈中最后剩下的数)&约瑟夫问题I

题目0,1,2,…,n-1这n个数字排成一个圆圈。从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0,1,2,3,4,5这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前四个数字依次是2、0、4,因此最后剩下的数字就是3。 约瑟夫环问题解答  既然题目中有一个数字圆圈,很容易想到用环形链表来模拟这个圆圈。我们可以创建一个有n个结点的环形

2016-02-27 11:47:26 582

原创 扑克牌顺子

题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的

2016-02-27 11:16:09 395

原创 10. Regular Expression Matching&正则表达式匹配

题目描述请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配。解答  每次从字符串中拿出一个字符和模式串中的字符去匹配。   首先分析符合匹配任意字符。如果模式

2016-02-27 09:55:09 760

原创 字符流中第一个不重复的字符

题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。解答  字符只能一个接一个从字符流中读出来。可以定义一个容器来保存字符在字符流中的位置。当一个字符第一次从字符流

2016-02-27 09:42:04 448

原创 238. Product of Array Except Self &构建乘积数组

题目描述Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].Solve it without division and in O(n).F

2016-02-26 22:08:26 471

原创 239. Sliding Window Maximum&滑动窗口的最大值

题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1

2016-02-26 17:02:17 968

原创 155. Min Stack&包含min函数的栈

题目Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.push(x) – Push element x onto stack. pop() – Removes the element on top of the stack. top() – Get th

2016-02-25 20:57:38 502

原创 第一个只出现一次的字符位置

题目描述在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始解答  使用哈希表,键值(key)为字符,值(value)是该字符出现的次数。   由于本题的特殊性,我们只需要一个非常简单的哈希表就能满足要求。字符类型(char)是一个长度为8位的数据类型,因此总共有256种可能。所以,我们创建一个长度为256的数组,每

2016-02-25 20:30:30 3090 1

原创 264. Ugly Number II&丑数

题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解答逐个判断每个整数是不是丑数,效率低public: bool isUglyNumber(int num) { while(num%2 == 0) num/=2

2016-02-25 20:08:17 786

转载 函数类型和函数指针类型

在C语言中,函数也是一种类型,可以定义指向函数的指针。我们知道,指针变量的内存单元存放一个地址值,而函数指针存放的就是函数的入口地址(位于.text段)。下面看一个简单的例子:#include <stdio.h>void say_hello(const char *str){ printf("Hello %s\n", str);}int main(void){ void (

2016-02-25 16:42:51 477

原创 数组中重复的数字

题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。解答使用哈希表,空间复杂度为O(n) bool duplicate(int numbers[], int length, i

2016-02-25 10:44:55 1157

原创 两个链表的第一个公共结点

题目描述输入两个链表,找出它们的第一个公共结点。解答暴力法 在第一个链表上顺序遍历每个结点,每遍历到一个结点时,在第二个链表上遍历每个结点。如果在第二个链表上有一个结点和第一个链表上当前遍历的结点一样,说明两个链表在这个结点上重合。如果第一个链表的长度为m,第二个链表的长度为n,那么该算法的时间复杂度为O(m*n)。使用两个栈 因为该题中两个链表都是单链表,所以如果二者有公共结点,那么从该结

2016-02-25 09:20:25 556

原创 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。解答为了实现只遍历链表一遍,就能找到倒数第k个结点,我们可以定义两个指针。第一个链表从链表头开始走k步之后,第二个链表从链表头开始走。当第一个指针到达链表尾部的NULL时,第二个指针所指的就是我们要找的结点。ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { i

2016-02-24 22:16:57 342

原创 替换空格

题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解答 首先原来的一个空格字符,要变成’%’,’2’,’0’三个字符,字符串会变长。如果是在原来的字符串上做替换,那么有可能覆盖该字符串后面的内存。如果是创建新的字符串并在其上进行替换,我们可以分配足够多的内存。 因为存在两种方案,

2016-02-24 20:55:33 284

原创 从上往下打印二叉树

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解答队列vector<int> PrintFromTopToBottom(TreeNode *root) { vector<int> ret; if(!root) return ret; deque<TreeNode *> queue; queue.p

2016-02-24 20:24:20 384

原创 153. Find Minimum in Rotated Sorted Array & 旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。解答  最直观的解法从头到尾遍历整个数组,找到最小元素。这个解法的时间复杂度是O(n)。   注意到,旋转之后的数组实际上可以划分为两个排序的子数组,且前面的子数组的元素都大于或者等于后

2016-02-24 20:15:26 490

原创 二叉搜索树的第k个结点

题目描述给定一颗二叉搜索树,请找出其中的第k个结点。 解答如果按照中序遍历的顺序遍历一棵二叉搜索树,遍历顺序的值是递增排序的。所以,只需要用中序遍历算法遍历一棵二叉搜索树,就很容易找到第k个结点。本来在整棵书中寻找第k个结点,遍历过1个结点后,在剩余的结点中就是寻找第k-1个结点。TreeNode* KthNode(TreeNode* pRoot, unsigned int k) {

2016-02-24 11:27:02 562

原创 boost::function

function的概念  function是一个函数对象的“容器”,概念上像是c/c++中函数指针类型的泛化,是一种“只能函数指针”。它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象。因此它可以被用于回调机制,暂时保管函数或函数对象,在之后需要的时机再调用。   function可以配合bind/lambda使用,存储bind/lambda表达式的结果,使其可以被

2016-02-23 16:09:16 447

原创 按之字形顺序打印二叉树

题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 以题目中的二叉树为例,一步步分析。当二叉树的根结点(结点1)打印之后,它的左子结点(结点2)和右子结点(结点3)先后保存到一个容器中。值得注意的是,在打印第二层的结点时,先打印结点3,后打印结点2。由此可见结点在这个容器中是后进先出的,因此该容

2016-02-22 20:56:35 3539 2

原创 对称的二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解答通常情况下,我们有三种不同的二叉树遍历算法,即前序遍历、中序遍历和后序遍历。在这三种遍历算法中,都是先遍历左子结点,再遍历右子结点。 我们针对前序遍历定义一种对称的遍历算法,即先遍历父结点,再遍历它的右子结点,最后遍历它的左子结点。如果用前序遍历算法遍历题图中的第一棵二叉树

2016-02-22 19:57:33 670

原创 重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {

2016-02-19 16:56:52 323

原创 二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解答题目中的二叉树的中序遍历序列是d,b,h,e,i,a,f,c,g。分三种情况如果一个结点有右子树,那么它的下一个结点就是它的右子树的最左子结点。也就是说,从右子结点出发一直沿着指向左子结点的指针,我们就可以找到它的下一个结点。例如图中结点b的下一个结

2016-02-19 15:49:37 956

原创 数字在排序数组中出现的次数

题目描述统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了四次,所以输出4。解答给定的数组是排序的,所以很自然地想到二分查找。在题目给出的例子中,我们可以先用二分查找找到一个3。由于3可能出现多次,所以我们找到的3的左右两边都可能有3。因此我们在找到的3的左右两边顺序扫描,分别找到第一个3和最后一个3。因为要查找的数字在长度为n的

2016-02-19 10:11:19 310

原创 数字在排序数组中出现的次数

题目描述统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了四次,所以输出4。解答给定的数组是排序的,所以很自然地想到二分查找。在题目给出的例子中,我们可以先用二分查找找到一个3。由于3可能出现多次,所以我们找到的3的左右两边都可能有3。因此我们在找到的3的左右两边顺序扫描,分别找到第一个3和最后一个3。因为要查找的数字在长度为n的

2016-02-19 10:11:14 972

原创 左旋转字符串

题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解答与151. Reverse Words in a String & 186.Reverse Word

2016-02-19 09:25:31 315

原创 151. Reverse Words in a String & 186.Reverse Words in a String II & 翻转单词顺序列

题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解答我们使用wi来表示第i个单

2016-02-19 09:08:37 514

原创 二叉树的深度&判断一棵二叉树是否是平衡二叉树&110. Balanced Binary Tree

二叉树的深度题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。如果一棵树为空,那么它的深度为0。如果一棵树只有一个结点,它的深度为1。如果根结点只有做子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度就是其右子树的深度加1。如果既有左子树又有右子树,那么树的深度就是其

2016-02-18 22:18:06 459

原创 和为S的连续正数序列

题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述:输出所有和为S的连续正数序列。序列内按

2016-02-18 20:51:34 923

原创 条款4:确定对象被使用前已先被初始化

永远在适用对象之前将它初始化。对于无任何成员的内置类型,必须手工完成此事。至于内置类型意外的任何其他东西,初始化责任落在构造函数身上。即确保每一个构造函数都将对象的每一个成员初始化。不要混淆赋值和初始化。c++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前。总是使用成员初始化列表,初始化列表中针对各个成员变量而设的实参,被拿去作为各个成员变量的构造函数的实参,所以效率较高。c

2016-02-18 19:56:17 430

原创 递归与循环--斐波那契数列、跳台阶、矩形覆盖

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?这三道题目都是同一类,可以有两种解法。 第一种是使用递归class Solution

2016-02-18 19:28:34 552

原创 从尾到头打印链表

题目输入一个链表,从尾到头打印链表每个节点的值。 将链表逆序后输出首先将链表逆序,然后从头到尾输出。但是该方法会改变原来的链表结构。下面给出将链表逆序的代码。ListNode* reverseList(ListNode* head) { if(!head || !head->next) return head; ListNode *p = he

2016-02-18 10:47:23 369

原创 141. Linked List Cycle & 142. Linked List Cycle II

步骤1:判定是否有环慢指针sp,每次前进一步快指针fp,每次前进两步如果慢指针与快指针在前进n次之后指向相同的位置,则存在环;否则,如果fp->next为NULL或fp->next->next为NULL,则不存在环。步骤2:如果存在环,返回环的入口结点 设链表的头结点为X,还的入口结点为Y,快慢指针第一次相遇的点为Z。XY之间的长度为a,YZ之间的长度为b,ZY之间的长度为c。 第

2016-02-17 10:55:50 376

原创 二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 二叉树的镜像定义 总结上面的过程,可以得出求一棵树的镜像的过程:前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点之后,就得到了树的镜像。void Mirror(TreeNode *pRoot) { if(!pRoot || (!pRoot->left && !pRoot

2016-02-16 16:10:21 304

原创 二维数组中的查找

题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 当我们需要解决一个复杂的问题时,一个很有效的办法就是从一个具体的问题入手,通过分析简单具体的例子,试图寻找普遍规律。针对这个问题,我们不妨也从题目给出的例子入手。 首先我们选取右上角的数字9。由于9大于7,并且9还是第

2016-02-16 15:52:39 356

vs2010.vssettings

vs2010.vssettings

2016-04-06

设计模式--design patterns课件

哈工大威海--孙玉山老师的设计模式课件,讲的非常之详细

2011-09-12

Ubuntu下Mentohust的用法

mentohustd的使用,很详细,希望对你有帮助

2011-09-11

空空如也

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

TA关注的人

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