
剑指offer
_jn
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer:面试题55-2:平衡二叉树
题目输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。思路首先,明确平衡二叉树的定义:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。思路一,在55-1:树的深度的基础上,遍历每个节点,并判断每个节点的左右子树高度差是否超过1,若超过,则不是平衡二叉树;若所有节点都不...原创 2019-07-10 11:04:03 · 167 阅读 · 0 评论 -
剑指offer:面试题55-1:二叉树的深度
题目输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的/结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路简洁理解:树的深度=max(左子树深度,右子树深度)+1,采用递归实现。(后序遍历)测试用例1.功能测试(左斜树、右斜树、普通树)2.边界值测试(一个结点)3.特殊测试(null)实现public class TreeDepth { ...原创 2019-07-10 11:08:18 · 136 阅读 · 0 评论 -
剑指offer:面试题49:丑数
题目我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。要求给出第k个丑数。思路思路一,逐一判断每个数字是否是丑数,直到找到第k个丑数思路二,上述思路需要判断每个数字,计算量大。因此思路二提出利用空间换时间的思路。即将已经排序好丑数存在一个数组中,之后的每个...原创 2019-07-10 11:47:16 · 194 阅读 · 0 评论 -
剑指offer:面试题42:连续子数组的最大和
题目输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整/数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路思路一分析规律,从第一个数字开始累加,若走到某一个数字时,前面的累加和为负数,说明不能继续累加了,要从当前数字重新开始累加。在累加过程中,将每次累加和的最大值记录下来,遍历完成后,返回该数字。思路二利用动态规划,用函数f(i)表示第i个数字结尾...原创 2019-07-10 11:58:20 · 192 阅读 · 0 评论 -
剑指offer:面试题40:最小的k个数
题目输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。思路思路一先对n个数排序,再找到前k个数。在排序算法中,最快的排序需要O(nlogn)的时间复杂度。但这里并不需要真的对所有数据进行排序,可以利用快排中的partition方法。1.即利用partition方法,将比某个数字小的都放在数组左边,大的都放在数组右边...原创 2019-07-10 12:15:43 · 222 阅读 · 0 评论 -
剑指offer:面试题39:数组中出现次数超过一半的数字
题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路思路一先排序,则次数超过一半的数字一定在数组中间。可以利用快排的partition方法,获得某随机数字x,将比x小的排到数组左边,比x大的排到数组右边。得到x的位置index,...原创 2019-07-10 14:42:03 · 196 阅读 · 0 评论 -
剑指offer:面试题38:字符串的排列
题目输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。(本文代码采用ArrayList接收返回的字符串,并要求不出现重复字符串)思路将字符串看成两部分,一部分是第一个字符,另一部分是后面的所有字符。首先确定第一个字符,该字符可以是字符串中的任意一个;固定第一个字符后,求出后面...原创 2019-07-10 14:49:33 · 180 阅读 · 0 评论