剑指offer-java
restart101225
在每一丝曙光破晓之前,一定是快要窒息的漫漫长夜。
展开
-
剑指offer(一)二维数组中的查找
题目是:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上往下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该函数。案例: 一个二维数组,每行、每列都是递增排序。 例如下面这个数组,如果查找数字7,则返回true,如果查找数组5,则返回false。 1 2 8 9 2 4 9 12 4 7 10 13 6 8原创 2017-08-23 12:12:47 · 240 阅读 · 0 评论 -
剑指offer(十七)数的子结构
题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 案例输入:{8,8,7,9,2,#,#,#,#,4,7},{8,9,2} 输出:true 分析需要一个个去遍历节点,如果当前节点的值等于B节点的根节点的值 那就从此节点开始,遍历其和B链表的所有节点 如果不符合,则继续往下遍历A链表 解题代码 /** public class TreeNode {原创 2017-09-01 15:37:52 · 278 阅读 · 0 评论 -
剑指offer(十六)合并两个排序的链表
题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 案例输入{1,3,5},{2,4,6},则应该输出{1,2,3,4,5,6} 分析两个递增链表,合并成一个单调不减的链表 需要从跟节点开始,比较两个链表大小,然后将最小的放入新的链表中,最小链表所在的链表则需要舍弃该节点,然后继续比较 解题代码 /* public class ListNode {原创 2017-09-01 13:55:09 · 191 阅读 · 0 评论 -
剑指offer(十五)反转链表
题目输入一个链表,反转链表后,输出链表的所有元素。 案例输入:{1,2,3,4,5},输出{5,4,3,2,1} 分析首先需要一个新的空链表作为存储 然后每次取出一个节点,也是用链表存储 最后加上原本的链表,一共需要三个链表结构 所以我们需要定义两个新的链表 解题代码 /* public class ListNode { int val; ListNode next = null;原创 2017-09-01 10:26:22 · 262 阅读 · 0 评论 -
剑指offer(十四)链表中倒数第k个结点
题目输入一个链表,输出该链表中倒数第k个结点。 案例输入{1,2,3,4,5}, 1,则输出5 分析这道题再次验证了思维的重要性 最初的思路,就是先遍历链表,算出长度,然后再次遍历到n-k,然后返回,当然思路和做法都是正确的,但是却不是最优的 优化之后,我想到了便利的时候将每一个节点都放进List中,然后直接get(n-k)就好了,这样只需要遍历一次 但是放进去的时候会出现一点问题,因为放进去的是一原创 2017-08-29 23:25:33 · 227 阅读 · 0 评论 -
剑指offer(十三)调整数组顺序使奇数位于偶数前面
题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 案例{1,8,3,4,5,6} ->{1,3,5,8,4,6} 分析1、要想保证原有次序,可以顺次移动或相邻交换。 2、i从左向右遍历,找到第一个偶数。 3、j从i+1开始向后找,直到找到第一个奇数。 4、将[i,…,j-1原创 2017-08-29 18:44:58 · 230 阅读 · 0 评论 -
剑指offer(十二)数值的整数次方
题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 案例2.5的3次方,3.6的5次方,2.8的-3次方等等 分析第一想法就是return Math.pow(base, exponent);然后通过了,这也是一个方法,java内部封装好的工具类 但是题目显然不是为了让我们那么随便过去的,而是要达到锻炼的目的 一种就是直接循环,先将exp原创 2017-08-29 16:44:01 · 269 阅读 · 0 评论 -
剑指offer(十一)二进制中1的个数
题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 案例1在二进制中是0000 0001,所以1的个数是1 3在二进制中是0000 0011,所以1的个数是2 负数在二进制中是用其对应正数的补码再加一来表示的,即: -3所对应的二进制是0000 0011,其补码是1111 1100,再加一则是1111 1101,1的个数是7位 分析将二进制数不断右移位至0即可遍历所有的1,但是中间原创 2017-08-28 23:33:09 · 315 阅读 · 0 评论 -
剑指offer(十)矩形覆盖
题目我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 分析先找规律,n<=0时,结果肯定返回0 n = 1时,返回值为1;n=2时,返回值为2;n=3时,返回值为3等等 当为n时,还是按照之前的思想,化整为零,从一处着手 现在看第一个1*1的位置,它有两种放置的方式,横着或者竖着放置矩形 当它竖着放置的时候,剩余的就是f原创 2017-08-28 23:12:17 · 320 阅读 · 0 评论 -
剑指offer(九)变态跳台阶
题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解析将之前的跳台阶理解透彻之后,这个就非常简单了,思路不会的可以参考剑指offer(八)跳台阶 n = 1和2 的结果不变,还是1和2 n = 3时,结果为4,f(2) + f(1) + 1 = 2f(2) n = 4时,结果为8,f(3) + f(2) + f(1) + 1 = 2原创 2017-08-28 17:35:05 · 317 阅读 · 0 评论 -
剑指offer(八)跳台阶
题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 案例 台阶 跳法 1 1 2 2 3 3 4 5 5 8 等等,以此类推 分析我想出来的方法是,利用组合来获取最终结果 即如果是全部一级一级跳,有一种方法;然后一个2级,其他都是一级跳,有n种方法; 以此类推,就是组合的计算,m个2级,则是在 (n - 2原创 2017-08-28 16:47:19 · 316 阅读 · 0 评论 -
剑指offer(七)斐波那契数列
题目 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39 定义 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法原创 2017-08-27 23:39:14 · 569 阅读 · 0 评论 -
剑指offer(六)旋转数组的最小数字
题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。若数组大小为0,请返回0。NOTE:给出的所有元素都大于0。 案例 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 分析 看到题目和案例,说是非递减数组,那默认就是递增数组了 于是按照递增数组思路来做,第一想法就是从后往原创 2017-08-27 23:07:56 · 204 阅读 · 0 评论 -
剑指offer(五)两个栈实现队列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 分析 这题没有什么案例,就是用两个栈来完成队列的操作 之前也写过这部分代码,自己找到看了一下,感觉有点不对,于是试了一下,发现真的不通过,正好再完善一下 栈的特性是先进后出,队列呢是先进先出,想用两个栈完成队列的操作还是挺简单的 先将一个栈作为存储,即每次进来都用stack1来进行存储,然后出的时候,将所原创 2017-08-27 20:33:45 · 210 阅读 · 0 评论 -
剑指offer(四)重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 案例 输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 分析 对于这道题,之前都是接触二叉树的遍历,对于逆向重建真的没有一点思路,然后想找规律做出来,最终想法受限,结果失败了。 然后看网上大神的做法和思路原创 2017-08-27 20:22:45 · 231 阅读 · 0 评论 -
剑指offer(三)从尾到头打印链表
题目 输入一个链表,从尾到头打印链表每个节点的值。 案例 输入一个链表,将值打印出来(我的案例上是将值放到ArrayList中去) ListNode root = new ListNode(); root.val = 1; root.nxt = new ListNode(); root.nxt.val = 2; root.nxt.nxt =原创 2017-08-23 17:49:44 · 246 阅读 · 0 评论 -
剑指offer(二)替换字符
题目展示 请实现一个函数,将一个字符串中的空格替换成“%20”。 案例: 当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思考题目 第一想法,直接用字符串的replace方法替换,即str.toString().replace(” “, “%20”); 然后拿去验证,发现竟然验证通过了。 本着精益求精的思想,想着可能人家想让我们自己实现repl原创 2017-08-23 16:20:14 · 221 阅读 · 0 评论 -
剑指offer(十八)二叉树的镜像
题目操作给定的二叉树,将其变换为源二叉树的镜像。 案例 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \原创 2017-09-01 16:13:40 · 237 阅读 · 0 评论