![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
糯米团子沐沐
只有你想不到的,没有你做不到的
展开
-
【剑指offer】二叉搜索树的第k个结点
题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。分析:用栈的方式将它的中序遍历表示出来,它的中序遍历即是从小到大的顺序,将中序遍历放到list集合中,需要第k个结点就输出list的get方法获取第k-1下标锁对应的值。代码:/*public class TreeNode...原创 2020-01-06 22:47:22 · 101 阅读 · 0 评论 -
【剑指offer】把数组排成最小的数
题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析:将数组的所有数字依次放到list中,在对他们进行排序(以字典序的形式排列),然后在依次添加到result中。代码:import java.util.*;public cla...原创 2020-01-04 22:22:06 · 76 阅读 · 0 评论 -
【剑指offer】整数中1出现的次数
题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。分析:利用String类型的valueOf方法将int类...原创 2020-01-03 23:21:15 · 68 阅读 · 0 评论 -
【剑指offer】连续子数组的最大和
问题描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续...原创 2020-01-01 18:27:14 · 84 阅读 · 0 评论 -
【剑指offer】字符串的排列
问题描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。分析:这个题的主要难点在于每个字符的所有排列,下面用的方法是使用递归来实现的,如图(用ABC来举例...原创 2019-12-30 22:57:47 · 94 阅读 · 0 评论 -
【剑指offer】二叉树和为某一值的路径
题目描述:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)分析:整体思路:定义一个要返回的指定类型(ArrayList<ArrayList<Integer>>)的对象result,在定义一个Arra...原创 2019-12-29 20:57:39 · 80 阅读 · 0 评论 -
【剑指offer】最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。分析利用Arrays.sort()方法对数组进行排序,这个方法是升序排序,数组中从第0个到第k-1个数据使我们需要的,把他们依次放到ArrayList集合中,返回回去就行了。import java.util.*;public cla...原创 2019-11-07 20:06:14 · 94 阅读 · 0 评论 -
【剑指offer】数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。分析定义一个临时变量用来记录数字出现的次数,然后就开始对数组进行遍历,当碰到需要找的这个数字时,次数加一。这是用简单的for循环来遍历数组。public class Solution { public int GetNumberOfK(int [] array , int k) { in...原创 2019-11-04 22:34:20 · 78 阅读 · 0 评论 -
【剑指offer】二叉搜索树的后序遍历
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路首先判断数组是否为空,为空就返回false,如果数组为1,就相当于只有一个根节点,那么就直接返回true。如果数组中前面的数小于数组的最后一个数(根),那么前面的那些小于根的数就为根的左子树,剩下的就为右子树,然后再分别对最字数和右...原创 2019-10-31 17:07:46 · 73 阅读 · 0 评论 -
【剑指offer】剪绳子
题目描述给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 6...原创 2019-10-31 15:53:27 · 109 阅读 · 0 评论 -
【剑指offer】不用加减乘除,实现加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析首先看十进制是如何做的:5+7=12第一步:相加各位的值,不算进位,得到2。第二步:计算进位值,得到10.如果这一步的进位值为0,那么第一步得到的值就是最终结果。第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。同样我们可以用三步走的方...原创 2019-10-27 15:57:59 · 104 阅读 · 0 评论 -
【剑指offer】数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。分析有两种方法:1.对数组进行排序,从前往后遍历,如果有相邻位置的数据相同就直接返回。import j...原创 2019-10-26 20:27:00 · 90 阅读 · 0 评论 -
【剑指offer】求1+2+3.....+n
题目描述:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。分析:1+2+3+...+n = n + (n-1) + ( n - 2) + (n - 3) + ....+1 + 0; 这就是递归调用的思想,首先先来看一下普通的递归调用。public class Solution {...原创 2019-10-26 20:06:45 · 118 阅读 · 0 评论 -
【剑指offer】从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析这个其实就是层序遍历,首先将父节点拉进顺序表中,判断他有没有左孩子和右孩子,如果有,就把左右孩子都带进来,如果没有就不用带。然后将父节点删除,在将原来父节点的左孩子作为父节点,继续循环。如下图:对于这棵树来说,首先进去的是他的根节点(即10),接着进去他的左孩子(6)和右孩子(14),此时cur指向...原创 2019-10-23 19:46:13 · 77 阅读 · 0 评论 -
【力扣OJ 】 复制带随机指针的链表
问题描述:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。示例:解释:节点 1 的值是 1,它的下一个指针和随机指针都指向节点 2 。节点 2 的值是 2,它的下一个指针指向 null,随机指针指向它自己。提示:你必须返回给定头的拷贝作为对克隆列表的引用。分析:1.用map的K...原创 2019-10-13 21:34:43 · 90 阅读 · 0 评论 -
【剑指offer】旧键盘
问题描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入描述:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。输出描述:按照发现...原创 2019-10-13 21:12:02 · 60 阅读 · 0 评论 -
【剑指offer】宝石与石头
问题描述:给定字符串J代表石头中宝石的类型,和字符串S代表你拥有的石头。S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J中的字母不重复,J和S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例:示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:...原创 2019-10-13 20:29:16 · 67 阅读 · 0 评论 -
【剑指offer】替换空格
题目描述:请实现一个函数,将一个字符串中的每个空格替换成%20"。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。有两种方法解决1.调用自带函数replace() 直接替换public class Solution { public String replaceSpace(StringBuffer str)...原创 2019-09-26 23:15:40 · 62 阅读 · 0 评论 -
【剑指offer】从尾到头打印链表
题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList 。1.非递归方法建立一个新的数组,把原数组的值放到新数组中/*** public class ListNode {* int val;* ListNode next = null;* ListNode(int val) {* ...原创 2019-09-27 14:05:35 · 56 阅读 · 0 评论 -
【剑指offer】旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。,输入一个非递减非序的数组的一个旋转,输出旋转数组的最小元素。例如:数组(3,4,5,1,2为(1,2,3,4,5)的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。调用Arrays的Sort排序方法import java.util.*;public c...原创 2019-09-27 20:00:58 · 69 阅读 · 0 评论 -
【剑指offer】斐波那契数列
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)n<=391.递归需要计算第n个数的值时,他的值为第n-1项与n-2项之和,直到递归为若干个第0项与第一项相加。而递归IDE出口就是当n小于等于1时,就返回n。public class Solution { public int Fibonacci(...原创 2019-09-28 07:48:29 · 184 阅读 · 0 评论 -
【剑指offer】跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)1.递归这个和斐波那契数列很相似,跳台阶,要不就是跳一个,要不就是跳两个。那么他递归的出口就有了,如果是跳一个,那么他就返回1,如果跳两个,他就返回2,当台阶数小于等于0时就返回0;public class Solution { publi...原创 2019-09-28 08:20:48 · 65 阅读 · 0 评论 -
【剑指offer】变态跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级..也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:当 n = 1 时,f(1)=1, 只有一种跳法。当 n = 2 时 , f(2) = 2他可以最后跳一个,也可以最后跳两个。.......那么第n个时f(n) = f(n-1)+f(n-2)+.......f(n-(n-1))+f(n-n...原创 2019-09-28 22:16:33 · 59 阅读 · 0 评论 -
【剑指offer】调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析:先用Arrays.sort()将数组排序,然后按次序将奇数和偶数分别放在两个list集合中,然后再分别将两个list集合中的数赋给数组。import java.util.*;public...原创 2019-10-05 18:58:12 · 72 阅读 · 0 评论 -
【剑指offer】反转链表
题目描述:输入一个链表,反转链表后,输出新链表的表头。分析:用pre记录当前节点的前一个节点用next记录当前节点的后一个节点用node记录头结点,即node是需要返回的节点用current指向头结点 当节点current不为空,进入循环,先用next记录current的下一个节点位置,即next = current.next。 如果ne...原创 2019-10-06 15:23:45 · 67 阅读 · 0 评论 -
【剑指offer】树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析很多人做这道题的时候会把子树和子结构混淆,这里解释下。子树一棵大树 A,一棵小树 B,若 B 是 A 的子树,则:B 和 A 的结点值完全相同,它们俩的左子树、右子树所有结点的值也完全相同 或者 B 的左孩子和 A 的结点值完全相同,它们俩的左子树、右子...原创 2019-10-06 17:56:36 · 87 阅读 · 0 评论 -
【剑指offer】二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 ...原创 2019-10-06 19:52:45 · 70 阅读 · 1 评论 -
【剑指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分析简单来说,就是不断地收缩矩阵的边界定义四个变量代表范围,up...原创 2019-10-06 20:27:07 · 121 阅读 · 0 评论 -
【剑指offer】包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。分析有两种不同的表示形式的方法,但是他们的本质其实都是一样的。第一种定义两个栈,一个存放所有的元素,还有一个存放最小元素的栈。第二种只需要定义一个栈,但他的本质其实相当于它定义了两个栈,用一个临时变量记录的是当前最小的数。入栈时,如果临时变量minEleme...原创 2019-10-13 20:19:42 · 114 阅读 · 0 评论 -
【剑指offer】二维数组的查找
题目描述:在一个二维数组中(每个一维数组的长度相同) ,每一行都按照从左到右递增的顺序排序,每列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:对于查找给定的数,那就直接遍历就行了,首先判断下数组是否为空,如果为空直接返回,否则开始遍历查找,找到了返回true,反之false.public class So...原创 2019-09-26 22:56:48 · 57 阅读 · 0 评论