随笔分类 - 剑指offer
摘要:题目链接:二叉搜索树与双向链表 题意:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 题解:这题也是参考了别人的最优解回答。首先看一下题目这个要求。大概就是下面图这个意思。 一开始肯定会想到的是中序遍历。以中序遍历走完BST是可以得
阅读全文
摘要:题目链接:复杂链表的复制 题意:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。 题解:啊这个题我没看懂其实。我看了剑指的题解。大概就是要分三步 1、复制指针的label和next。将复制的节点跟在原节点后
阅读全文
摘要:题目链接:二叉树中和为某一值的路径 题意:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 题解:用一个一维数组记录路径。每次存储一下当前节点的值
阅读全文
摘要:题目链接:二叉搜索树的后序遍历序列 题意:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 题解:二叉搜索树是,左子树上的节点都都小于根结点,右子树上的节点大于根结点,它的子树也满足这个规则。 后序遍历是左右根遍历。因此我们只需要判断,当前节点如果是在右子树上,那么必然不会再出现比他
阅读全文
摘要:题目链接:从上往下打印二叉树 题意:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 题解:层序遍历啊。借助一个队列,从根结点开始,每次输出一个,就压入它的左右子节点。 代码: 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *lef
阅读全文
摘要:题目链接:栈的压入、弹出序列 题意:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序
阅读全文
摘要:题目链接:包含min函数的栈 题意:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。 题解:使用两个栈,一个用来存放数据,一个用来存储min。我们在入栈的时候
阅读全文
摘要:题目链接:顺时针打印矩阵 题意:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 题解:画个图。模拟。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输出 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 发现规律,从左向右走
阅读全文
摘要:题目链接:二叉树的镜像 题意:操作给定的二叉树,将其变换为源二叉树的镜像。 题解:递归大法好啊。上来交换一波左右节点,如果有左右子树,递归交换。 代码: 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct Tre
阅读全文
摘要:题目链接:树的子结构 题意:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 题解:先在A中找到B的根结点,找的过程递归实现。再判断在A中以这个根结点为节点的子树是不是和B一样。 代码: 1 /* 2 struct TreeNode { 3 int val;
阅读全文
摘要:题目链接:合并两个排序的链表 题意:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 题解:最开始做一下特殊处理,判空操作。然后判断当前两个链表节点哪个小,就把哪个先放入合并链表中,再做递归。 代码: 1 /* 2 struct ListNode { 3
阅读全文
摘要:题目链接:反转链表 题意: 输入一个链表,反转链表后,输出新链表的表头。 题解:用三个指针,分别指向当前结点,它的前一个结点和后一个结点。 在遍历过程中,将当前结点的尾结点和前一个结点替换。 代码: 1 /* 2 struct ListNode { 3 int val; 4 struct ListN
阅读全文
摘要:题目链接:链表中倒数第k个结点 题意:输入一个链表,输出该链表中倒数第k个结点。 题解:两个指针,让其中一个先走k-1步,那后走的指针,走到倒数第k个时,前面一个就走完了! 代码: 1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next
阅读全文
摘要:题目链接:调整数组顺序使奇数位于偶数前面 题意:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 题解:两个数组分别存奇偶数,清空原数组,然后全部奇偶丢进原数组。(STL大法好)
阅读全文
摘要:题目链接:数值的整数次方 题意:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0 题解:啊我这个题很暴力啊。当时好像是用java做的。c++也一样的代码。。 分三种情况: 1、指数是0,那么a^0
阅读全文
摘要:题目链接:二进制中1的个数 题意:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 题解: 1、很容易想到每次做&运算,然后判断结果是否为0来判断是否有1。 2、去讨论区看了下第一个方法效率太低。 第二个方法就是让每次让n & n-1。我刚开始没懂举了个例子。 n = 1100 11
阅读全文
摘要:题目链接:用两个栈实现队列 题意:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 题解: stack2为空时,用stack1入栈,stack2出栈就是队列的顺序。当stack2不为空时,stack1继续插入的话,就直接先输出2再操作。 代码: class Sol
阅读全文
摘要:题目链接:重建二叉树 题意:根据前序和中序建二叉树 题解:数据结构里大家做前序中序建二叉树的题应该很熟了。这个题就是将思考过程用代码模拟一遍。 前序数组的第一个节点pre[0]就是根节点 ,在中序数组中找到这个根节点,以此划分左子树和右子树。 递归遍历到叶节点即可。 代码: 1 /** 2 * De
阅读全文
摘要:题目链接:数字在排序数组中出现的次数 题意:统计一个数字在排序数组中出现的次数。 题解:最容易想到的就是暴力统计。O(n)。但是这题是有序数组,暗示我们可以用二分优化到O(logn)。 第一次二分k最先出现的位置,第二次二分k最后出现的位置,即 data[mid-1] == k, 此时最先出现的k就
阅读全文
摘要:题目链接:丑数 题意:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 题解:这题最开始是暴力做的。就是根据定义,依次做判断。然后TLE了。emmm...然后就有了接
阅读全文

浙公网安备 33010602011771号