剑指offer-java实现
风雨雾凇
这个作者很懒,什么都没留下…
展开
-
剑指offer-chapter2-面试题9-斐波那契数列(java)
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。(n<=39)知识点:菲波那切数列、递归、循环菲波那切数列: |- 0 n=0 f(n)= | 1 n=1 |- f(n-1)+f(n-2) n>2递归: 优点: 简洁 缺点:原创 2018-01-30 23:23:01 · 370 阅读 · 0 评论 -
剑指offer-chapter2-面试题7-用两个栈实现队列(java)
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解决思路:由于有两个栈,故我们可以用一个栈来实现push操作,然后当pop的时候再将该栈的值倒入栈2,则可以实现队列操作。代码package problem7;import java.util.Stack;/** * Created by fengyuwusong on 2018/1/29 14:55. *原创 2018-01-30 14:24:11 · 258 阅读 · 0 评论 -
剑指offer-chapter2-面试题5-从尾到头打印链表(java)
题目:输入一个链表,从尾到头打印链表每个节点的值。 链表结构:class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }解法:对于java来说,有多种工具可以用 1. 使用Collections的reverse 2. 巧用add方法(原创 2018-01-29 13:59:26 · 309 阅读 · 0 评论 -
剑指offer-chapter2-面试题6-重建二叉树(java)
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。用到的知识点:前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 例如一颗树: 10 / \原创 2018-01-29 14:50:00 · 205 阅读 · 0 评论 -
剑指offer-chapter2-面试题4-替换空格(java)
题目: 替换空格请实现一个函数,吧字符串中的每个空格替换成 “%20”。例如输入 “We are happy.” , 这输出“We%20arehappy.”。(不使用replace&insert方法和必须在原串中改变) 解题思路:解法1:思路: 复杂度O(n²),遍历所有字符并添加后移动后面的字符串(不推荐)。 如字符串“We are happy.”:初始化: W原创 2018-01-17 21:22:58 · 272 阅读 · 0 评论 -
剑指offer-chapter2-面试题3-二维数组的查找(java)
题目: 二维数组的查找:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如有一符合条件的二维数组:1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15需要在此数组中查找 7难点&关键点:选取好在数组中与目标数做比较的数的位置。如选取中间位置&右上&左下位置原创 2018-01-16 14:49:45 · 232 阅读 · 0 评论 -
剑指offer-chapter2-面试题2-单例模式(java)
题目:设计一个类,我们只能生成该类的一个实例。解法如下:package problem2;/** * 问题:设计一个类,我们只能生成该类的一个实例。 * Created by fengyuwusong on 2018/1/15 15:04. *//** * 懒汉式加载 * 只适合单线程环境(不好) * 注解:Singleton的静态属性instance中,只有instance为null的原创 2018-01-15 22:51:23 · 742 阅读 · 1 评论 -
剑指offer-chapter3-面试题17-合并两个排序的链表(java)
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 例如: 链表1:1->3->5->7 链表2:2->4->6->8 合并后:1->2->3->4->5->6->7->8思路:判断两个参数节点大小,选取小的节点作为头结点,然后再将较小的节点填入同一方法参数, 返回值为头结点的下一节点,形成递归排序。代码:package problem17;原创 2018-02-04 23:10:40 · 326 阅读 · 0 评论 -
剑指offer-chapter3-面试题16-反转链表(java)
题目:输入一个链表,反转链表后,输出链表的所有元素。 例如 输入链表:1->2->3 反转后: 1<-2<-3思路:通过观察举例可以发现,反转即将该节点的next节点的next节点设置为本身。 即将1的下一个节点2的下一个节点设置为1,首节点设置为null。 注意:这个例子需要额外增加三个节点空间, 1. 反转后首节点 2. 已经排序好的头结点 3. 循环head节点的替代代码:p原创 2018-02-04 22:53:11 · 205 阅读 · 0 评论 -
剑指offer-chapter3-面试题15-链表中倒数第k个节点(java)
题目:输入一个链表,输出该链表中倒数第k个结点。 例如: 1->2->3->4 倒数第2个节点为3。思路:解法1:先遍历一次链表,获得中节点数n,然后则可计算出倒数第k个节点的位置为(n-k+1)。再遍历一次链表获得该节点。解法2(最优解):设置两个节点,第一个节点先在链表中前进k-1步,然后第2个节点也一起同步前进,当第一个节点到达链尾n时,第2个节点到达倒数第k个节点。(n-(k-1))=原创 2018-02-04 22:36:42 · 252 阅读 · 0 评论 -
剑指offer-chapter3-面试题14-调整数组顺序使奇数位于偶数前面(java)
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分, 所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 (相对剑指offer有所修改) 例如: 12345 调整后 13524思路:解法1:判断奇偶,如果是奇数则调至前面,该位置后面的数全都往后挪。时间复杂度O(n²)解法2:判断奇偶,如果是偶数在奇数前面,则替换两者原创 2018-02-04 22:29:19 · 187 阅读 · 0 评论 -
剑指offer-chapter3-面试题13-在O(1)时间删除链表节点(java)
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 单向链表结构://链表节点定义 class ListNode { Integer value; ListNode next; @Override public String toString() { return "ListNode{" +原创 2018-02-02 22:24:21 · 240 阅读 · 0 评论 -
剑指offer-chapter3-面试题12-打印1到最大的n位数(java)
题目:输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印1,2,3…999陷阱:考虑int 或long类型溢出必须使用字符模拟加减操作或使用java包解法 使用BigInteger等类 使用数组进行递归操作 new char[n] char int都行 每一位进行+1打印 代码:package problem12;import java.math.BigInteger;/**原创 2018-02-02 22:21:29 · 228 阅读 · 0 评论 -
剑指offer-chapter3-面试题11-数值的整数次方(java)
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 不得使用使用Math.pow()方法,不考虑大数问题。知识点:错误处理方式: 返回值: 优点 和系统API一致 缺点:不能方便的使用计算结果 全局变量: 能够方便的使用计算结果 缺点:用户可能会忘记检查全局变量 异常: 可以为不同的出错原因定义不同的异常类型,原创 2018-02-02 22:18:38 · 267 阅读 · 0 评论 -
剑指offer-chapter2-面试题10-二进制中1的个数(java)
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 例如: 9的二进制1001 有2位是1,则输出2知识点:1) 与、或、异或的运算规律 与(&) 0&0=0 1&0=0 0&1=0 1&1=1 或(|) 0|0=0 1|0=1 0|1=1 1|1=1 异或(^) 0^0=0原创 2018-01-31 00:02:08 · 268 阅读 · 0 评论 -
剑指offer-chapter2-面试题9-矩形覆盖(java)
题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路:当使用一格2*1的小矩形去覆盖的时候,有两种方法: 1) 竖着覆盖,则剩下的面积为 (2*n-1) 则接下来求 (2*n-1)的解决方法 2) 横着覆盖,则剩下的面积为 (2*n-2)+一格必须横着覆盖的区域(已经确定)原创 2018-01-30 23:44:27 · 256 阅读 · 0 评论 -
剑指offer-chapter2-面试题9-青蛙跳台阶变态版(java)
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。 f(3) = f(3-1) + f(3-2) + f(3-3) … f原创 2018-01-30 23:36:30 · 273 阅读 · 0 评论 -
剑指offer-chapter2-面试题9-青蛙跳台阶(java)
题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 知识点:菲波那切数列 思路: 假设青蛙跳上n个台阶,那么他有两种跳法 1. 跳一格 剩余 n-1格 2. 跳两格 剩余 n-2格 则剩下的问题变成解决 n-1 格和n-2格台阶有多少种跳法 当n=2时,则跳法有2种 一格一格的条或两格一起跳 当n=1时,则有跳法1种 当原创 2018-01-30 23:30:57 · 374 阅读 · 0 评论 -
剑指offer-chapter2-面试题8-旋转数组的最小数字(java)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析&解法:解法1:首先可以使用遍历的方法找出其中最小数字,但是由于该时间复杂度为O(n),不是最优解法。解法2:虽然原创 2018-01-30 14:49:16 · 240 阅读 · 1 评论