自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

依步_的专栏

点滴积累,一步一个脚印

  • 博客(19)
  • 问答 (7)
  • 收藏
  • 关注

原创 剑指offer_面试题26_复杂链表的复制

题目:请实现函数ComplexListNode * Clone(ComplexListNode * pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个 m_pNext 指针指向下一个结点外,还有一个 m_pSibling 指向链表中的任意结点或者NULL。复杂链表结构定义如下:typedef struct Node{ int m_nValue; struct

2015-08-17 21:29:43 785 2

原创 剑指offer_面试题25_二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路劲。举例:         10        /     \      5     12    /    \ 4       7分析:1、从头结点 10 开始 =====》遍历左结点 5====》判断是否是叶结点 ===否===》

2015-08-17 13:53:29 719

原创 剑指offer_面试题24_二叉搜索树的后序遍历序列(递归)

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。二叉搜索树规律:1、若 左子树 不空,则 左子树上所有结点的值 均小于它的根结点的值。2、若 右子树 不空,则 右子树上所有结点的值 均大于它的根结点的值。3、左右子树也分别为二叉搜索树。举例1:输入数组:{5、7、6、

2015-08-17 10:01:46 654

原创 剑指offer_面试题_从上往下打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图4.5中的二叉树,则依次打印出8、6、10、5、7、9、11。             8          /     \        6     10      /   \     /   \    5    7 9   11思路:树的层序遍历。应用 队列 这一数据容器。如上图的输出顺

2015-08-17 09:33:37 950

原创 剑指offer_面试题22_栈的压入、弹出序列(总结规律)

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列:1、2、3、4、5 是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2 就不可能是该压栈序列的弹出序列。

2015-08-17 09:16:11 1028

原创 剑指offer_面试题21_包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小最小元素的min函数。在该栈中,调用min、push 及 pop的时间复杂度都是O(1)。本题关键问题在于:O(1)时间复杂度的 min 函数。即无论占中元素如何变化。都要在 O(1)内知道最小值。因此,需要设置两个栈:1、数据栈,用于数据的压入和弹出2、辅助栈,存入与数据栈中相对应的最小元素即 数据栈每压入一

2015-08-16 21:35:22 505

原创 剑指offer_面试题20_顺时针打印矩阵(思路在一步步分解之中)

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1    2     3     4 5    6     7     8 9   10   11   1213  14  15   16则依次打印出数字:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。思路如下:算法如下:#inclu

2015-08-13 21:31:40 716

原创 剑指offer_面试题19_二叉树的镜像

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。解题方法:遇到复杂问题,可以通过画图、举例等方法,来让自己加深理解。思路往往就在你一步步的分析之中。思路:遍历这颗树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。交换完所有非叶子结点的左右孩子结点后,就得到了树的镜像。写递归时的想法;该设置的退出条件设置好,该进行的交换操作写好,当孩子结点不为空的时候,就去递归孩子

2015-08-13 20:15:15 612

原创 剑指offer_面试题18_树的子结构

题目:输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。两个步骤:1、第一步在树 A 中找到和树 B 的根结点的值一样的结点 R2、第二步再判断树 A 中以 R 为根结点的子树是不是包含和树 B 一样的结构。对于递归:想好判断条件,以及 什么条件下该去递归。#include #include using namespace std;typedef str

2015-08-13 19:59:05 671

转载 堆、栈 的区别

预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) :一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static):全

2015-08-12 21:48:51 419

原创 剑指offer_面试题17_合并两个排序的链表(两种思维)

题目:输入两个递增排序的链表,合并这两个链表,并使新链表中的结点仍然是按照递增排序的。第一种思维:合并两个排序的链表,类似于合并两个排序数组,所不同的仅是一个用链表保存数据,一个用数组保存数据。算法如下:(下面的算法前提是:头结点 不是 链表的第一个数据节点。)/**方法一:合并两个排序链表,使用了新创建的链表来保存,没有改动两个原始链表*/ListNode *merge_tow

2015-08-10 22:13:06 867

原创 剑指offer_面试题16_反转链表(两种方法)

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。在解决问题前,先想好测试用例:1、功能测试:输入的链表含有多个结点,链表中只有一个结点2、特殊输入测试:头结点为 NULL指针解决这个问题有两种方式:前提:这两种方式 是以 头结点并不是第一个数据节点 为基准 表示的。这种方式,头结点并不保存链表的结点数据,其数据位只保存链表结点总数。

2015-08-10 11:00:21 3429

原创 剑指offer_面试题14_调整数组顺序使奇数位于偶数前面(函数指针用法)

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。1、一般想法,不考虑时间复杂度:每次遍历数组,碰到一个偶数就拿出来,将后面所有数字向前挪动一位,在将该偶数放到最后。2、利用冒泡排序的思想,两个指针,一前以后,如果前为偶数,后为奇数,就交换。算法如下:void Reorder_array(int p[],i

2015-08-09 21:06:03 704

原创 剑指offer_面试题15_链表中倒数第k个节点(考虑问题要全面)

题目:输入一个链表,输出该链表中第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个节点。例如一个链表有6个节点,从头结点开始它们的值依次是1,2,3,4,5,6。这个链表的倒数第3个节点是值为4的结点。本题收获:考虑问题要全面,保持代码的鲁棒性(健壮性)。提高代码的鲁棒性的有效途径是进行防御性编程。防御性编程 是 一种编程习惯,是指预见在什么地方可能会

2015-08-09 20:34:30 667

原创 剑指offer_面试题12_打印1到最大的n位数(大数问题)

题目:输入数字n,按顺序打印出从 1 最大的 n 位十进制数。比如输入3,则打印出 1、2、3 一直到最大的三位数即 999。由于题目中,没有说明n的大小,因此这是一个大数问题。代码如下:/*数值每次增 1,用一个量来保存,每次增 1,就返回打印*//*算法主要分两块:数值增 1,以及 打印*/bool Increment_2(string &str){ if

2015-08-08 20:51:38 755

原创 剑指offer_面试题55_字符流中第一个不重复的字符 *

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符“go”时,第一个只出现一次的字符是“g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符时“l”。ps. 本题,我在阿里二面的时候,被问到了,需要注意。第一种解法:一种很笨的解法,时间效率低下,但确是我的第一反应。需要记下以便反思。1、首先用一个指

2015-08-07 10:08:38 2368

原创 剑指offer_面试题11_数值的整数次方(*)

题目:实现函数 double Power(double base, int exponent),求 base 的 exponent 次方。不得使用库函数,同时不需要考虑大数问题。 通过这道题,了解一些不曾注意的知识点:1、变量命名要合理且明了2、需确保代码的完整性,从三个角度下手:      1)功能测试:确保主体功能      2)边界测试:考虑各种边界值

2015-08-05 14:28:49 864

原创 剑指offer_面试题10_二进制中1的个数(位运算)

题目:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如把 9 表示成二进制 1001,有 2 个 1。因此如果输入9,该函数输出2。 位运算基本概念:五种位运算:与(&)、或(|)、异或、左移 和 右移。ps:其中 异或(运算符 ^),1 ^ 0 = 1;   1 ^ 1 = 0;  0 ^ 0 = 0; 0 ^ 1 = 1;  即 相同为假,不同为真。左移

2015-08-03 16:43:25 664

原创 剑指offer_面试题9_斐波那契数列

题目一:写出一个函数,输入n,求斐波那契数列的第n项。题目二:一只青蛙一次可以跳上1级台阶,也可以跳上2级。请求青蛙上一个 n 级的台阶总共有多少种跳法。第二个题目,其实就是第一个题目的意思。若将 n 级台阶时的跳法看成是 n 的函数,记为 f(n)。青蛙在第一级台阶时,有两种跳法:第一次跳 1 级,那么,还剩 n-1 级台阶,那么其跳法总数为 f(n-1)第一次跳 2 级,那

2015-08-03 11:06:21 544

空空如也

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

TA关注的人

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