![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
文章平均质量分 71
上善若海
这个作者很懒,什么都没留下…
展开
-
二维数组中的查找【剑指offer——JAVA实现】
【考点:数组】二维数组中的查找题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。【初始】解法一:public class Solution { public boolean Find(int target, int [][] array) { if(a...原创 2018-04-07 15:53:39 · 383 阅读 · 0 评论 -
反转链表(含思路解答示意图)【剑指offer——JAVA实现】
【考点:代码的鲁棒性】反转链表题目描述输入一个链表,反转链表后,输出链表的所有元素。解题思路 三个指针,pre、head和next,每次让【head指向的节点】指向【pre指向的节点】,然后遍历,即可完成。解题代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { ...原创 2018-04-08 09:37:28 · 1643 阅读 · 0 评论 -
合并两个排序的链表【剑指offer——JAVA实现】
【考点:递归和循环】合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路本题可以用递归进行求解。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val;...原创 2018-04-08 09:37:59 · 210 阅读 · 0 评论 -
树的子结构【剑指offer——JAVA实现】
【考点:递归和树的遍历】树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路本题我有两种解题思路:1、使用后序遍历二叉树A/B,得到后序遍历数组后判断两者是否包含的关系2、使用递归去比较每个元素代码实现1/**public class TreeNode { int val = 0; TreeNode left = n...原创 2018-04-09 09:31:52 · 378 阅读 · 0 评论 -
二叉树的镜像【剑指offer——JAVA实现】
【考点:递归和循环】二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 1...原创 2018-04-09 09:39:18 · 178 阅读 · 0 评论 -
顺时针打印矩阵(含思路解答示意图)【剑指offer——JAVA实现】
【考点:规律】顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: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.解题思路如下图所示 设置四个点,分别对应矩形的四个角,然后按照顺时针的顺序输出每一个圈的...原创 2018-04-09 10:13:19 · 384 阅读 · 0 评论 -
包含min函数的栈(含思路解答示意图)【剑指offer——JAVA实现】
【考点:规律】顺时针打印矩阵题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解题思路准备两个存储空间,一个为数组,存放每次得到的值;另一个为栈,每次存放当前最小值。如下图所示: 于是,反向推理,每次取出元素时,数组元素减一(置空),栈的顶部元素出栈,即可得到当前的最小值。代码提交import java.util.Stack;import java.util.A...原创 2018-04-09 10:31:43 · 176 阅读 · 0 评论 -
表示数值的字符串(含思路解答示意图)【剑指offer——JAVA实现】
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。【解法一】思路:状态机实现,如下图所示代码实现原创 2018-04-03 21:12:58 · 269 阅读 · 0 评论 -
字符流中第一个不重复的字符【剑指offer——JAVA实现】
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。思路:时间复杂度O(1),空间复杂度O(n) 1、用一个256大小的数组统计每个字符出现的次数 2、用一个队列,如果...原创 2018-04-03 21:19:51 · 183 阅读 · 0 评论 -
链表中环的入口结点【剑指offer——JAVA实现】
题目描述一个链表中包含环,请找出该链表的环的入口结点。 public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}解题思路:利用指针遍历等方法较为复杂,可以用特殊的数据结构来帮助解决。找到环的入口 = 找到一个已经遍历过...原创 2018-04-04 08:56:39 · 165 阅读 · 0 评论 -
删除链表中重复的结点(含思路解答示意图)【剑指offer——JAVA实现】
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题思路:(1)在头部新建一个节点,这样就省去了讨论头部开始重复的情况(2)剩下的情况见示意图代码实现public class Solution { public ...原创 2018-04-04 10:17:48 · 418 阅读 · 1 评论 -
链表中倒数第k个结点(含思路解答示意图)【剑指offer——JAVA实现】
【考点:递归和循环】链表中倒数第k个结点题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路本题我采用的是递归,还记录了别人的一个解法解法一:递归/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/...原创 2018-04-08 09:36:51 · 285 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面【剑指offer——JAVA实现】
【考点:排序】调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路本题可以采用插入排序,与插入排序相比,其不同点在于比较条件不是大小而是奇偶性质,如果插入的元素为奇数,则要不断与之前的数比较。解题代码public class Soluti...原创 2018-04-08 09:36:02 · 285 阅读 · 0 评论 -
从尾到头打印链表【剑指offer——JAVA实现】
【考点:链表】从尾到头打印链表题目描述输入一个链表,从尾到头打印链表每个节点的值。【初始】使用栈/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }...原创 2018-04-07 15:56:15 · 182 阅读 · 0 评论 -
替换空格【剑指offer——JAVA实现】
【考点:字符串】替换空格题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class Solution { public String replaceSpace(StringBuffer str) { if(str == null) return null...原创 2018-04-07 15:54:52 · 296 阅读 · 0 评论 -
重建二叉树(含思路解答示意图)【剑指offer——JAVA实现】
【考点:树】重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * ...原创 2018-04-07 15:57:52 · 732 阅读 · 1 评论 -
用两个栈实现队列【剑指offer——JAVA实现】
【考点:栈和队列】用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); //stack1专门处理push Stack...原创 2018-04-07 15:58:51 · 269 阅读 · 0 评论 -
旋转数组的最小数字(含思路解答示意图)【剑指offer——JAVA实现】
【考点:查找和排序】旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大...原创 2018-04-07 16:34:43 · 249 阅读 · 0 评论 -
斐波那契数列【剑指offer——JAVA实现】
【考点:递归和循环】斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39解法一:递归public class Solution { public int Fibonacci(int n) { if(n > 39 || n <= 0) return 0; if(n == 1 || n =...原创 2018-04-07 16:45:41 · 241 阅读 · 0 评论 -
跳台阶【剑指offer——JAVA实现】
【考点:递归和循环】跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路对于本题,前提只有:一次1阶或者2阶的跳法。a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)c.由a与b假设可以得出总跳法为: f(n) = ...原创 2018-04-07 16:52:17 · 208 阅读 · 0 评论 -
变态跳台阶【剑指offer——JAVA实现】
【考点:递归和循环】变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)所以f(n)=f(n-1)+f(n-2)+...+f(1)因为f(n-1)=f(n-2)+f(n...原创 2018-04-07 16:57:02 · 186 阅读 · 0 评论 -
矩形覆盖【剑指offer——JAVA实现】
【考点:递归和循环】矩形覆盖题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路本题与《【剑指offer——JAVA实现】跳台阶》思路是一致的。依旧是斐波那契数列 2*n的大矩形,和n个2*1的小矩形 其中target*2为大矩阵的大小 有以下几种情形: target <= 0 大矩形为&...原创 2018-04-07 17:06:36 · 425 阅读 · 0 评论 -
二进制中1的个数【剑指offer——JAVA实现】
【考点:位运算】二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。提交代码public class Solution { public int NumberOf1(int n) { int count = 0; while(n != 0){ //将n的二进制表示与 0000 0000 0000 0...原创 2018-04-08 09:35:15 · 149 阅读 · 0 评论 -
《剑指offer》66题JAVA代码算法实现全集
这篇文章是自己在做《剑指offer》过程中的记录和总结,我发现自己出错的原因大部分是因为这些代码我都是直接手打的,没有使用IDE,很多这样最能检验自己的基本功是否扎实,强推~以下这些题目提供的解法大部分都是我在答完题之后结合别人的解题思路进行了整合,同时也会贴出别人的多元化解法。所有题目的目录如下:【剑指offer——JAVA实现】二维数组中的查找【剑指offer——JAVA实现】替换空格【剑指o...原创 2018-03-26 15:44:39 · 1270 阅读 · 0 评论 -
10.正则表达式匹配【剑指offer——JAVA实现】【LeetCode——JAVA实现】
题目描述LeetCode 10给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符。'*' 匹配零个或多个前面的元素。匹配应该覆盖整个字符串 (s) ,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "aa"p...原创 2018-04-17 20:29:59 · 1006 阅读 · 0 评论