剑指offer
文章平均质量分 71
black_and_blue
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer 31题 【时间效率】连续子数组的最大和
题目描述数组{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)牛客传送门:点击打开链接思路:设置一个最大值result、一个当前值的和curSum。从头开始遍历数组,当curSum小于等于0时,让curSum等于当前值, 每次遍历都和result比较,如果curSum大于result,更新result。public cl原创 2016-07-21 10:50:58 · 281 阅读 · 0 评论 -
剑指offer 8题 【查找和排序 】旋转数组的最小数字
public class Title8 { public int minNumberInRotateArray(int [] array) { if(array == null || array.length == 0) return 0; if(array[0] < array[array.length-1])原创 2016-07-14 18:06:15 · 232 阅读 · 0 评论 -
剑指offer 9题 【递归和循环】 跳台阶
public int JumpFloor(int number) { if(number <=0) return 0; if(number <=2) return number; int[] a = new int[number+1]; a[1] = 1; a[2] =原创 2016-07-14 18:06:31 · 278 阅读 · 0 评论 -
剑指offer 24题 【举例让抽象具体化】二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。牛客传送门:点击打开链接package offer;public class Title24 { public boolean VerifySquenceOfBST(int[] sequence) {原创 2016-07-14 23:49:33 · 265 阅读 · 0 评论 -
剑指offer 23题 【举例让抽象具体化】从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。牛客传送门:点击打开链接嗯。。。挺简单public class Title23 { public ArrayList PrintFromTopToBottom(TreeNode root) { ArrayList result = new ArrayList(); if(root == null原创 2016-07-14 23:30:13 · 263 阅读 · 0 评论 -
剑指offer 22题 【举例让抽象具体化】栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路很简单,将pushA不断压入栈中,如果栈顶与popA匹配,则pus原创 2016-07-14 23:04:04 · 402 阅读 · 1 评论 -
剑指offer 41题【知识迁移能力】和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 牛客传送门:点击打开链接原创 2016-07-13 15:48:39 · 315 阅读 · 0 评论 -
剑指offer 7题 【栈和队列】用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。牛客传送门:点击打开链接public class Title7 { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void push(int node) {原创 2016-07-14 16:57:33 · 207 阅读 · 0 评论 -
剑指offer 6题 【树】重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。牛客传送门:点击打开链接前序遍历的特点就是第一个结点是根结点,于是在中序遍历序列中找根结点,把中序序列一分为二:左半部分是根结点的左原创 2016-07-14 16:30:28 · 262 阅读 · 0 评论 -
剑指offer 59题 【树】对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:通常有三种不同的二叉树遍历算法,即前序遍历、中序、后序遍历。我们是否可以定义一种遍历算法,先遍历右子结点再遍历左子结点。例如{8,6,5,7,6,7,5} ,第一次前序遍历:{8,6,5,7,6,7,5},第二次新的遍历算法:{8,6,5,7,6,原创 2016-07-25 22:23:26 · 505 阅读 · 0 评论 -
剑指offer 25题 【举例让抽象具体化】二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。牛客传送门:点击打开链接思路:从根节点开始遍历,当访问一个节点时,list加入这个节点,如果是叶子节点则sum值与target值进行比较,若相等则结果集加入list的clone;如果不是叶子节点,则遍历它的左右节点。当退原创 2016-07-15 13:49:43 · 438 阅读 · 0 评论 -
剑指offer 26题 【分解让复杂问题简单】复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思想:在每个节点后面复制一个节点,然后拆分。因为是复制,所以原链表结构不变(这块当时没有考虑周全)。public class Title26原创 2016-07-15 15:39:05 · 220 阅读 · 0 评论 -
剑指offer 30题 【时间效率】最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。牛客传送门:点击打开链接思路一:不断地利用快排partition函数,当index == k-1时结束。(注意这里是k-1,因为index表示数组位置)思路二:利用优先队列。代码一:public class T原创 2016-07-20 18:06:35 · 373 阅读 · 0 评论 -
剑指offer 29题 【时间效率】数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。牛客传送门:点击打开链接写一个鲁棒的代码还是不容易的...思路:1.不断地利用partition函数进行分割,结束条件为partition返回原创 2016-07-20 16:45:48 · 319 阅读 · 0 评论 -
剑指offer 28题 【分解让复杂问题简单】字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:将字符串abcdefg分成俩部分,a和bcdefg,然后将a和bcdefg各位不停的交换原创 2016-07-20 15:01:34 · 608 阅读 · 0 评论 -
剑指offer 52题 【数组】 构建乘积数组
题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。思路一:建立俩个数组,一个数组从左至右计算,另一个数组从右至左计算。思路二:如思路一,省略俩个数组。public class Title5原创 2016-07-19 23:41:32 · 275 阅读 · 0 评论 -
剑指offer 42题 【知识迁移能力】翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?牛客传送原创 2016-07-19 22:09:05 · 473 阅读 · 0 评论 -
剑指offer 42题 【知识迁移能力】左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!牛客传送门:点击打开链接目前有三种思路,第一种思路不需要辅助空间,原创 2016-07-19 16:25:00 · 290 阅读 · 0 评论 -
剑指offer 44题 【抽象建模能力】扑克牌的顺序
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为原创 2016-07-19 11:51:24 · 505 阅读 · 0 评论 -
剑指offer 66题 【回溯法】矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占原创 2016-07-26 22:08:58 · 543 阅读 · 0 评论 -
剑指offer 67题 【回溯法】机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 牛客传送门:点击打开链接p原创 2016-07-26 22:05:07 · 968 阅读 · 0 评论 -
剑指offer 5题 【链表】从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。挺简单的,只是记录下自己做过。import java.util.*;public class Solution { public ArrayList printListFromTailToHead(ListNode listNode) { ArrayList result = new ArrayList();原创 2016-07-13 22:42:58 · 212 阅读 · 0 评论 -
剑指offer 41题【知识迁移能力】和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 牛客传送门:点击打开链接推荐解法,作者牛客id:马客(Mark)typedef vector vi;class Solution {public: vi FindNumbersWithSum(const vi&原创 2016-07-13 18:00:16 · 336 阅读 · 0 评论 -
剑指offer 34题 【时间空间效率的平衡】丑数
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。牛客传送门:点击打开链接思路:用一个数组维护已经产生的丑数,每个丑数乘以2、3、5就是新生成的丑数,设最新的丑数为x;用三个指针indexTwo、indexThree、indexFi原创 2016-07-23 12:53:02 · 408 阅读 · 0 评论 -
剑指offer 39题 【知识迁移能力】二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。牛客地址:点击打开链接思路还是很清晰的/** * 二叉树的深度 * */public class Title39 { public int TreeDepth(TreeNode pRoot) { if(pRoot原创 2016-07-11 22:43:47 · 280 阅读 · 0 评论 -
剑指offer 63题 【树】二叉搜索树的第k个结点
题目描述给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 3 7 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。牛客传送门:点击打开链接思路:结合二叉搜索树的特点(左结点及其子树比当前节点小,右结点及其子树比当前节点大)。中序遍历即可知道第k大的结点。测试用例:二叉搜索树:[5,3,7,2,4,6,8]原创 2016-07-22 15:21:40 · 935 阅读 · 0 评论 -
剑指offer 58题 【树】二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。牛客传送门:点击打开链接思路:①.判断当前节点是否有右子树,如果有,那么右子树最左节点就是返回值。②如果没有右子树,则判断父节点的左子树是不是当前节点,若是则返回父节点;若不是则把当前节点设置为父节点,继续这个判断。原创 2016-07-22 12:01:54 · 264 阅读 · 0 评论 -
剑指offer 11题 【代码的完整性】数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。牛客地址:点击打开链接public class Power { public double power(double base, int exponent) { if(exponent == 0) return原创 2016-07-11 18:11:07 · 244 阅读 · 0 评论 -
剑指offer 19题 【面试思路】二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 牛客地址:点击打开链接输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 /原创 2016-07-10 23:33:10 · 242 阅读 · 0 评论 -
剑指offer 17题 【代码的鲁棒性】合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 牛客地址:点击打开链接还是挺容易的,看了别人代码 有递归和非递归俩种方式,下面的为非递归。public class Title17 { public ListNode Merge(ListNode list1,ListNode list2) { // 空判断原创 2016-07-10 17:34:53 · 273 阅读 · 0 评论 -
剑指offer 16题 【代码的鲁棒性】反转链表
题目描述输入一个链表,反转链表。 /** * 16.反转链表 * */public class Title16 { /** * 书中代码 */ public ListNode ReverseList(ListNode head) { ListNode before = null,cur = head, next = null,retNode = nul原创 2016-07-10 10:08:57 · 276 阅读 · 0 评论 -
剑指offer 15题 【代码的鲁棒性】链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。 /** * 题目:链表中倒数第k个结点 * 题目描述:输入一个链表,输出该链表中倒数第k个结点。 * 需要注意的是,如果链表长度不够k,则返回null */public class Title15 { public class ListNode { int val; ListNode next =原创 2016-07-09 23:23:48 · 244 阅读 · 0 评论 -
剑指offer 35题 【时间空间效率的平衡】第一个只出现一次的字符
牛客传送门:点击打开链接public class Solution { public int FirstNotRepeatingChar(String str) { if(str == null || str.length() == 0) return -1; int[] sign = new int[256];原创 2016-07-21 18:13:49 · 258 阅读 · 0 评论 -
剑指offer 37题 【时间空间效率的平衡】两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。 牛客传送门:点击打开链接思路:①如果任一链表为null,返回null。②计算俩个链表的长度。并能知道长度差值step。③让长的链表先走step步,然后俩个链表一起走,如果相等则返回这个结点。④如果没有公共结点,返回null。代码如下:public class Title37 { pu原创 2016-07-23 15:54:46 · 383 阅读 · 0 评论 -
剑指offer 61题 【树】按之字形顺序打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。原创 2016-07-13 11:09:37 · 307 阅读 · 0 评论 -
剑指offer 10题 【位运算】二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。牛客传送门:点击打开链接public class Title10 { /** * 普通解法,将一不断地左移,然后与n进行与运算,如果结果不为0,则加一。 */ public int NumberOf1(int n) { int count = 0原创 2016-07-13 12:07:19 · 220 阅读 · 0 评论 -
剑指offer 3题 【数组】二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。牛客传送门:点击打开链接思路挺清晰,如下图,从右上角开始寻找,如果此位置小于target,则下移一行;如果此位置大于target,则向左移动一下,当走到左下角时没有找到,则返回false。难度在原创 2016-07-13 22:10:22 · 286 阅读 · 0 评论 -
剑指offer 4题 【字符串】替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。牛客传送门:点击打开链接public class TitleSpace { public String replaceSpace(StringBuffer str) { int原创 2016-07-13 18:22:31 · 248 阅读 · 0 评论 -
剑指offer 38题 【知识迁移能力】数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。牛客传送门:点击打开链接思路:用二分来查找最左的位置与最右的位置,同时注意边界值。测试用例:[1,1,1,1,2,3,4],1 // 左边界[1,2,3,3,3,3],3 // 右边界[1,3,3,3,3,4,5],2 // 不在数组中[1,2,3,3,3,3,4,5],原创 2016-07-24 09:55:25 · 270 阅读 · 0 评论 -
剑指offer 20题 【画图让抽象形象化】顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: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]题目描述完毕原创 2016-07-12 13:54:05 · 366 阅读 · 0 评论
分享