剑指offer
鱼语雨06
这个作者很懒,什么都没留下…
展开
-
剑指offer-----丑数
剑指offer-----丑数题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。实现创建数组保存已找到的丑数,res[index]根据丑数的定义,除了res[0] = 1,丑数数组的每个数应该是前面的丑数乘以2,3,5的结果。接下来应该思考的是如何保存丑...原创 2020-05-05 17:58:50 · 107 阅读 · 0 评论 -
剑指offer-----链表中的第 K 结点
链表中的第 K 结点题目描述输入一个链表,输出该链表中倒数第k个结点。实现public class TheLastKNodeInTheList { public ListNode FindKthToTail(ListNode head,int k) { if (head == null) { return null; }...原创 2020-04-17 18:39:26 · 104 阅读 · 0 评论 -
剑指offer-----调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。实现遍历数组,直接在数组内进行奇偶数的交换若数组长度为 0 或 1 时,不用进行任何操作,直接返回;(因此遍历从第二个数字开始)当前数字为奇数时,且当前数字的前一个数字为偶数,交换...原创 2020-04-17 18:31:28 · 105 阅读 · 0 评论 -
剑指offer-----数值的整数次方
数值的整数次方实现给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。实现快速幂(二分)baseexp = baseexp/2 * baseexp/2 = (base2)exp/2当 exp 为偶数,baseexp = (base2)exp/2当 exp 为奇数,baseexp...原创 2020-04-16 19:57:02 · 91 阅读 · 0 评论 -
剑指offer-----反转链表
反转链表题目描述输入一个链表,反转链表后,输出新链表的表头。实现链表为空,返回 null链表只有一个结点,返回头结点 head一般情况实现反转创建新的头结点 newHead,若原链表结点遍历完,将最后一个结点指向 newHeadpublic class ReverseLinkedList { public ListNode ReverseList(ListNod...原创 2020-04-16 18:08:08 · 79 阅读 · 0 评论 -
剑指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,11,10.实现从四个方向遍历数组,定义四个边界,打印过程中不断收缩边界上边界 top = 0下边界...原创 2020-04-16 17:49:38 · 100 阅读 · 0 评论 -
剑指offer-----包含min函数的栈
包含 min 函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。实现创建两个栈,栈A 和栈B栈A 表示原栈中的正常数据栈B 表示栈A每一层栈帧对应的最小值(1) 入栈:先把 node 插入到 栈A 中如果 栈B ...原创 2020-04-16 17:07:05 · 85 阅读 · 0 评论 -
剑指offer-----栈的压入,弹出序列
栈的压入,弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。实现创建一个新的栈 B,将 pushA 的元素依次入栈依次判断新的栈 B 的元素是否与 po...原创 2020-04-16 16:49:16 · 87 阅读 · 0 评论 -
剑指offer-----二叉树的镜像
二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。实现递归:遍历 + 交换/** * Author: lisiyu * Created: 2020/4/13 */public class MirrorImageOfBinaryTree { public void Mirror(TreeNode root) { if (root == null...原创 2020-04-13 22:57:37 · 75 阅读 · 0 评论 -
剑指offer-----树的子结构
树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)实现首先,两树任一为空,则返回 false;然后,root2 是 root1 的子结构,有三种情况:(1) root2 是 root1 的一个子结构(2) root2 是 root1 的左子树的一个子结构(3) root2 是 root1 的右子树的一个子结构最后,...原创 2020-04-13 22:54:46 · 73 阅读 · 0 评论 -
剑指offer-----旋转数组的最小数字
旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。实现public int minNumberInRotateArray(int [] ...原创 2020-04-05 23:06:32 · 73 阅读 · 0 评论 -
剑指offer-----斐波那契数列
斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39实现法1递归时间复杂度:O(2^n)空间复杂度:O(n)public int Fibonacci1(int n) { if (n == 0) { return 0; } if (n == 1) { ...原创 2020-04-05 22:17:27 · 77 阅读 · 0 评论 -
剑指offer-----二进制中1的个数
二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。实现两种方法的时间复杂度和空间复杂度均为 O(1)法1每一位都与1相与,结果不等于0的就在sum上加1public int NumberOf1(int n) { int sum = 0; int a = 1; for (int i = 0; i < 32; i++) ...原创 2020-04-05 19:59:20 · 74 阅读 · 0 评论 -
剑指offer-----矩形覆盖
矩形覆盖题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?实现f(1) = 1f(2) = 2f(3) = 3f(4) = 5……思路与斐波那契数列相同public int RectCover(int target) { /** * f(1) = 1 * f(2) = ...原创 2020-04-05 17:18:39 · 92 阅读 · 0 评论 -
剑指offer-----变态跳台阶
变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。实现f(1) = 1f(2) = 2f(3) = 4……f(n) = 2^(n-1) 或 f(n) = 2 * f(n-1)public int JumpFloorII(int target) { if (target == 1) { ...原创 2020-04-02 23:12:01 · 69 阅读 · 0 评论 -
剑指offer-----跳台阶
跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。实现法1public int JumpFloor1(int target) { if (target == 1) { return 1; } if (target == 2) { return 2;...原创 2020-04-02 23:07:58 · 66 阅读 · 0 评论 -
剑指offer-----用两个栈实现队列
用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。实现import java.util.Stack;public class TwoStacksForQueue { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer...原创 2020-04-02 23:05:28 · 56 阅读 · 0 评论 -
剑指offer-----用两个栈实现队列
用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。实现import java.util.Stack;public class TwoStacksForQueue { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer...原创 2020-04-01 23:03:02 · 69 阅读 · 0 评论 -
剑指offer-----重建二叉树
重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。实现递归时间复杂度:O(n)空间复杂度:O(n)public TreeNode reConstructBinaryTree(...原创 2020-04-01 23:00:02 · 79 阅读 · 0 评论 -
剑指offer-----从尾到头打印链表
从尾到头打印链表题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。实现法1:借助 list.add(index, value) , 非递归时间复杂度:O(n^2)空间复杂度:O(n)public ArrayList<Integer> printListFromTailToHead1(ListNode listNode) { ArrayList&...原创 2020-03-31 12:31:00 · 69 阅读 · 0 评论 -
剑指offer-----替换空格
替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。实现法1:直接替换使用字符串的 replaceAll 方法public String replaceSpace1(StringBuffer str) { String ret = str.toString(...原创 2020-03-31 12:17:05 · 73 阅读 · 0 评论 -
剑指offer-----二维数组中的查找
二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。实现法1:暴力法时间复杂度:O(n^2)空间复杂度:O(1)public boolean Find1(int target, int [][] array) { ...原创 2020-03-31 12:06:03 · 60 阅读 · 0 评论