随笔分类 - 剑指Offer
摘要:剑指Offer:连续子数组的最大和 题目描述 输入一个整形数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个数组。求所拥有子数组的和的最大值。要求时间复杂度为O(n) 题目分析 我们可以用动态规划的思想来解决这个问题。以函数f(i)表示以第i个数字结尾的子数组的最大和,那么我们需要求出m
阅读全文
摘要:剑指Offer:数组中的逆序对 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 题目分析 这道题,也是我《剑指Offer》中的顽石,一
阅读全文
摘要:剑指Offer:从上往下打印二叉树 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 题目分析 这道题主要是队列的应用,我们首先要了解,队列是先进先出,我们把第一层即根节点放入队列中,先打印的就是根节点,接着放入第二层及根节点的孩子节点,所以后打印的就是第二次的节点,接着第三层...
阅读全文
摘要:剑指Offer& LeetCode:验证栈序列【946】 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1
阅读全文
摘要:剑指Offer:顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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,
阅读全文
摘要:剑指Offer:二叉树的镜像 题目题目 操作给定的二叉树,将其变换为源二叉树的镜像。 题目分析 这道题我们要做的其实很简单就是交换树中所有节点的左右孩子位置。以根节点为例,它有孩子,所以交换孩子的位置。这里注意,只有要一个孩子都需要交换,无非是和NULL交换而已。 当然我们需要处理所有节点,故在处理
阅读全文
摘要:剑指Offer:调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 题目分析 给定的是整数数组,但其实只有两类数,即奇数和偶数,我们并不需要
阅读全文
摘要:剑指Offer:二进制中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 题目分析 我们学习两个位运算: 第一个是右移: 在Java中右移动又分为: 有符号右移(如上图,正数补0,负数补1),表示为 n>>1,即右移动一位。 无符号右移(同上图,但是通通补0),表
阅读全文
摘要:剑指Offer:二叉树打印成多行【23】 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 题目分析 Java题解
阅读全文
摘要:剑指Offer:二叉树中和为某一值的路径【34】 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 题目分析 Java题解
阅读全文
摘要:剑指Offer:二叉搜索树的后序遍历序列【33】 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 题目分析 Java题解
阅读全文
摘要:剑指Offer:链表中环的入口节点【23】 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 题目分析 第一步确定链表中是否包含环,怎么确定呢?我们定义两个指针橙和蓝,橙每次走一步,蓝每次走两步,如果他俩重合了,这就说明链表中存在环。 第二步求环的长度,两者碰头后
阅读全文
摘要:剑指Offer:删除链表的节点【18】 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 题目分析 如上图所示,我们的定义了三个指针,其中第二、三个指针用于找到重复元
阅读全文
摘要:剑指Offer:栈的压入、弹出序列【31】 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压
阅读全文
摘要:剑指Offer:对称的二叉树【28】 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 题目分析 Java题解
阅读全文
摘要:剑指Offer:字符串排列【38】 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 题目分析 Java题解
阅读全文
摘要:剑指Offer:矩形覆盖【N1】 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 题目思考 大矩形是由单元块(1*2)填充的,但是大矩形不是一下生成的,而是由比他小的矩形通过添加单元块生成的,添加的策略只能是
阅读全文
摘要:剑指Offer:树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路 实话实说这道题是剑指Offer前半部分难度比较大的,我们先来思考一个简单情况,如下图,左树枝叶比右树繁茂,但是枝干是相同的,不同的枝叶情况不一样。 此时,我们如
阅读全文
摘要:剑指Offer:反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头。 解题分析 首先在对链表进行节点互换、移动操作时,用到的最基本的工具就是指针。利用指针我们可以对链表节点进行变换操作,所以这道题最基本的一点是确定使用指针这一工具。 接下来,去思考用几个指针来解决问题: 对于一个指针来说
阅读全文
摘要:剑指Offer:调整数组顺序使奇数位于偶数前面【21】 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解题分析 关于排序算法的稳定性 排序前后两个相等的数相对位置不变
阅读全文