- 博客(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
空空如也
未重写finalize()方法的对象是否只需一次标记即可被JVM回收?
2021-06-02
一道用 sizeof 求结构体所占大小的笔试题?求教
2015-08-30
关于 multiset 容器用法的疑问?问题来源于“找最小的k个数”
2015-08-25
一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组?
2015-08-12
一个未满的整型数组,怎么求真实元素个数?
2015-07-24
写了这样一个函数,为什么第一个循环中for语句会失效?
2015-06-29
C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组?
2015-06-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人