12 2015 档案
摘要:【题目描述】 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。【解题思路】 在后序遍历得到的序列中,最后一个数字是树的根节点的数值。数组中前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的...
阅读全文
摘要:【题目描述】 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。【解题思路】 当我们得到两个链表中值较小的头结点并把它链接到已经合并的链表之后,两个链表剩余的节点依然是排序的,其后续的处理步骤与上述相同,因此可以考虑递归的思路:我们可以定义一个递归函数来...
阅读全文
摘要:【题目描述】 输入一棵二叉树的根节点,判断该二叉树是否是平衡二叉树。如果某二叉树中的任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树(AVL树)。【代码实现】实现一:需要重复遍历节点多次,简单但是不足以打动面试官 1 /* 2 struct TreeNode { 3 int ...
阅读全文
摘要:【题目描述】 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。【解题思路】【代码实现】实现一:假设:要求在原来的字符串上做替换,并且保证输入的字符串后面有足够多的多余空间。在原有字符串的基础之...
阅读全文
摘要:【题目描述】 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。【代码实现】实现一:递归实现 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left...
阅读全文
摘要:【题目描述】在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入描述:array: 待查找的二维数组target:查找的数字输出描述:查找到返回true,查找不到返回false【解题...
阅读全文
摘要:【题目描述】 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?【解题思路】 我们不妨把2*n的覆盖方法记作f(n)。假设从左向右进行覆盖。最后一次用一个1*2的小矩形去覆盖大矩形最右边时,有两种选择,竖着放或者横着放...
阅读全文
摘要:【题目描述】 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。【解题思路】 通过数学归纳法证明:f(n)=2^n-1。1 class Solution {2 public:3 int jumpFloorII(int number...
阅读全文
摘要:【题目描述】一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。【解题思路】 本质就是斐波那契数列。 对于青蛙的最后一跳,它可以跳一个上去,也可以跳两个上去。 即f(n)=f(n-1)+f(n-2)。【代码实现】 1 class Solution { 2 p...
阅读全文
摘要:【题目描述】 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。【解题思路】若n为偶数,则a^n=(a^n/2)*(a^n/2)若n为奇数,则a^n=(a^(n-1)/2)*(a^(n-1)/2)*2【代码实现】实现一:利用递归方式,但是容...
阅读全文
摘要:【题目描述】 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。【解题思路】研究丑数序列:1 2 3 4 5 6 8 9 10 1...
阅读全文
摘要:【题目描述】 输入两个链表,找出它们的第一个公共结点。 For example, the following two linked lists:A: a1 → a2 ↘ c1 → c2 → c3 ...
阅读全文
摘要:【题目描述】 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。【原题重现:2016 腾讯C/C++研发工程师】 春节期间小明使用微信收...
阅读全文
摘要:【题目描述】 从上往下打印出二叉树的每个节点,同层节点从左至右打印。【解题思路】 用队列实现二叉树的层序遍历(即图中的广度优先遍历)【代码实现】 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 ...
阅读全文
摘要:【问题描述】 假定有一定数量的牌,每次随机抽取,问如何保证每次抽到的牌不重复直到抽完所有的牌。 【解题思路】 假定有N张牌,每次随机抽一张牌,看完之后将其与这副牌的最后一张牌交换,更新然后在前N-1张牌中再次随机抽取一张,直到N-1为0 结束,这样保证可以抽完所有不一样的牌,时间复杂度保持在O(1)
阅读全文
摘要:【题目描述】 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。【代码实现】 1 #...
阅读全文
摘要:【题目描述】 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-1...
阅读全文
摘要:【题目描述】一个链表中包含环,请找出该链表的环的入口结点。【解题思路】 有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。 那么问题来了,如何判断一个链表是不是这类链表?如果链表为存在环,如果找到环的入口点? 当fast若与slow...
阅读全文
摘要:【题目描述】 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞...
阅读全文
摘要:【题目描述】操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 1...
阅读全文
摘要:【题目描述】用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。【解题思路】思路其实很简单,如下所示:1、所谓的“一次性倒完”可以通过一直往Stackpop中push元素,直到StackPush栈大小为空时为止来实现。2、如果StackPop中有数据,则直接弹出栈顶元...
阅读全文
摘要:【题目描述】输入一个链表,从尾到头打印链表每个节点的值。输入描述:输入为链表的表头输出描述:输出为需要打印的“新链表”的表头【代码实现】实现一:基于栈的实现 1 /** 2 * struct ListNode { 3 * int val; 4 * struct List...
阅读全文
摘要:【题目描述】大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。【代码实现】传统的递归方式:这个题可以说是迭代(Iteration) VS 递归(Recursion),f(n) = f(n-1) + f(n-2),第一眼看就是递归啊,简直完美的递归环境,这样想着关键代码两三...
阅读全文
摘要:【题目描述】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。【代码实现】 1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int count=0; 5 while(n) 6...
阅读全文
摘要:在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式。记录一下。 管道通信(匿名,有名) 管道通信,在一个进程之中,只能单一的对其写或者是读,而不可以及执行写操作又执行读操作。这一点,我们可以将其
阅读全文
摘要:代码练习:#include #include using namespace std;int main(){ cout vec(9, 8); cout ::iterator iter = vec.begin(); iter != vec.end();iter++) { ...
阅读全文