自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Deft_MKJing的博客

一切正在发生的早已命中注定,包括这句话

  • 博客(10)
  • 收藏
  • 关注

原创 算法学习记录十三(C++)--->10年微软面试题树的子结构

描述输入两棵二叉树A和B,判断树B是不是A的子结构。分析例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一样的,因此B就是A的子结构。 第一步:找到相同根节点 第二步:找到相同根节点后匹配左右子树是否值都匹配代码 (复杂flag版本但是思路很清晰)/*struct TreeNode { int val; struct TreeNode *left; stru

2017-08-31 16:50:27 370

原创 算法学习记录十二(C++)--->链表题目集合

描述输入一个链表,输出该链表中倒数第k个结点。分析最普遍的方法是,先统计单链表中结点的个数,然后再找到第(n-k)个结点。注意链表为空,k为0,k为1,k大于链表中节点个数时的情况。时间复杂度为O(n)这里主要讲一下另一个思路,这种思路在其他题目中也会有应用。主要思路就是使用两个指针,先让前面的指针走到正向第k个结点,这样前后两个指针的距离差是k-1,之后前后两个指针一起向前走,前面的指针走到最后

2017-08-25 16:58:48 812

原创 算法学习记录十一(C++)--->调整数组顺序使奇数前偶数后

描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析方法1:冒泡排序调换(只是条件变成了奇数和偶数互换) 方法2:临时数组存储(开启临时数组存储偶数,然后原数组删除偶数,最后进行push_back) 方法3:指针调换(该方法不能保证数组的奇偶的相对位置)方法1clas

2017-08-24 11:16:31 781

原创 算法学习记录十(C++)--->数值的整数次方

描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析1.普通方法,几次方就是乘以几次 2.位运算解法普通解法class Solution {public: double Power(double base, int exponent) { double ret = 1; if(expon

2017-08-11 16:43:51 1164

原创 算法学习记录九(C++)--->二进制中1的个数

描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析这种位运算的题目面试中很容易遇到 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三

2017-08-11 14:39:57 396

原创 算法学习记录八(C++)--->一句代码搞定变态跳台阶

基本跳台阶问题一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解法一(递归)对于本题,前提只有 一次 1阶或者2阶的跳法。a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a\b假设可以得出总跳法为: f(n) = f(

2017-08-11 10:56:26 648

原创 算法学习记录七(C++)--->二分法找有序旋转数组最小值

描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析 1.最笨的方法,你可以直接遍历获取到最小的,显然面试的时候你这样写就GG了 2.和第一个一样,直接调用So

2017-08-10 16:33:55 555

原创 算法学习记录六(C++)--->获取斐波那契数列第n项

描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39分析这东西第一眼想到的就是递归,但是递归就会有问题,请看; f(n) = f(n-1) + f(n-2) 随便弄个简单的数字,其实你拆开来就会这样 Fibonacci(4) = Fibonacci(3) + Fibonacci(2); = Fibonac

2017-08-03 16:55:44 5351

原创 算法学习记录五(C++)--->两个栈实现队列

描述*用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 *栈是先进后出,FILO *队列是先进先出,FIFO思路入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。class Solution{public: // 栈1负责入栈 void push(i

2017-08-03 15:56:07 339

原创 算法学习记录四(C++)--->通过前序和中序序列重建二叉树

描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路前序 DLR —> 根左右 第一个元素就是当前根节点中序 LDR —> 左根右 根元素分割了左子树和右子树 1.我们首先从前序中找到第一个元素创

2017-08-03 14:32:35 578

空空如也

空空如也

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

TA关注的人

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