![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序代码
敲代码的小饼干
用代码挣得小饼干
展开
-
剑指offer第二十二题(Java):最小的K个数
最小的K个数题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。题目解析此题相对而言比较简单,要求最小的K个数,先将数组进行排序,然后取出K个数就可以了。代码解析public static ArrayList<Integer> GetLeastNumbers_Solution(int []...原创 2020-03-25 18:52:26 · 104 阅读 · 0 评论 -
剑指offer第二十一题(Java):数组中超过一半的数字
数组中超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目解析假如数组中有个数字的个数超过了数组长度的一半,我们可以将数组进行排序,排序后中间的数字肯定就是我们要找的数字所以我们可以先将数组进行排序,...原创 2020-03-25 18:31:00 · 149 阅读 · 0 评论 -
剑指offer第二十题(Java):二叉树的后序遍历
二叉树的后序遍历题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目解析后序遍历的数组有这样一个特征:最后一个为根节点,前一段为左子树,都比根节点小,后一段都为右子树,都比根节点大。然后我们再将前一段,后一段再进行递归判断是否符合要求。代码解析 public static bool...原创 2020-03-25 18:03:01 · 112 阅读 · 0 评论 -
剑指offer第十九题(Java):从上到下打印二叉树
从上到下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目解析该题的主要解题重点在于应用队列的先进先出的原理,具体的解析步骤如下图代码解析public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = n...原创 2020-03-25 15:29:23 · 81 阅读 · 0 评论 -
剑指offer第十八题(Java):栈的压入弹出序列
栈的压入弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)题目解析有两种情况,一种是按照插入的顺序,例如1,2,3,4...原创 2020-03-25 14:21:21 · 99 阅读 · 0 评论 -
剑指offer第十七题(Java):包含min函数的栈
包含min函数的栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。题目解析在min函数中,找出栈中最小的数,用迭代器来实现主要熟悉栈中的一些方法:1 boolean empty()测试堆栈是否为空。2 Object pee...原创 2020-03-24 18:19:03 · 70 阅读 · 0 评论 -
剑指offer第十六题(Java):顺时针打印矩阵
顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.题目解析做这道题需要一步一步来第一步:获取该二维数组的行和列,判断行和列是否有效第二步:定...原创 2020-03-24 17:47:49 · 77 阅读 · 0 评论 -
剑指offer第十五题:镜像二叉树
镜像二叉树题目解析操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5题目解析我们可以吧大二叉树看作是一个一个的小二叉树,我们只需要将小二叉树的左右节点交换即可然后再递归将每一个小二叉树都完成交换。代码解析pub...原创 2020-03-24 15:28:33 · 62 阅读 · 0 评论 -
剑指offer第十四题(Java):树的子结构
树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)题目解析我们要判断一个小二叉树是不是在大的二叉树中,需要用到递归第一步:如果大的树为空或者小的树为空,返回false第二步:判断两个树的根节点是否相等,如果,相等调用DoseHasSubtree(TreeNode root1,TreeNode root2)方法继续进行判断...原创 2020-03-24 15:12:12 · 56 阅读 · 0 评论 -
剑指offer第十三题(Java):合并两个排序的链表
合并两个排序的链表题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目解析首先我们应该创建一个新的链表用来存储合并后的数据接下来,我们只需要递归比较两个链表中的数据大小就可以。代码解析public static ListNode Merge(ListNode list1,ListNode list2) { //判断是否有...原创 2020-03-24 14:21:12 · 52 阅读 · 0 评论 -
剑指offer第十二题(Java):反转链表
反转链表题目描述输入一个链表,反转链表后,输出新链表的表头。题目解析我们对链表进行操作,一定要思路清晰首先将当前节点pNode的下一个节点保存起来,为pNext;***如果这个节点为空,那么相当于遍历到最后了,就将pNode赋值给newNode,将newNode返回即可。***如果这个节点不为空,那么先将当前节点pNode的下一个节点设置为前一个节点pPrev,再将当前节点pN...原创 2020-03-23 17:00:22 · 53 阅读 · 0 评论 -
剑指offer第十一题(Java):链表中倒数第k个节点
链表中倒数第k个节点题目要求输入一个链表,输出该链表中倒数第k个结点。题目解析如果遍历链表去找的话,需要遍历两遍,第一遍得出链表的长度,第二遍再去找倒数第k个数,这样很耗费时间,我们采取另一种方法进行操作我们可以用两个指针,都从头结点开始,然后一个指针先走k-1步,然后两个指针同时开始向前走,这样第一个指针到达最后时,另一个节点就到达了倒数第k个位置。代码解析public L...原创 2020-03-23 15:59:26 · 81 阅读 · 0 评论 -
剑指offer第十题(Java):数组奇数位于偶数前
数组奇数位于偶数前题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目解析为了不打乱数组的顺序,我们可以根据冒泡排序得出一些启示,如果前一位时偶数,后一位时奇数,那么就交换位置,直到全部交换完为止代码解析/* * 这种方法根据冒泡排序改编,当j和...原创 2020-03-23 15:32:56 · 119 阅读 · 0 评论 -
剑指offer第九题(Java):数值的整数次方
数值的整数次方题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方,保证base和exponent不同时为0.题目解析该题比较简单,编写题目时,只需要注意一点,就是exponent的正负,如果是正数的话,那就exponent是几,base就乘几次,如果是负数,最后乘出来的数字要记得取其倒数。代码解析public s...原创 2020-03-23 14:48:25 · 74 阅读 · 0 评论 -
剑指offer第八题(Java):二进制中1的个数
二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题目解析方法1:将该数字转化为一个数组类型,将其遍历,查找1的个数 public static int NumberOf(int n) { int t=0; /* * 在Integer类中有静态方法toBinaryString(int i)方法, * 此方法...原创 2020-03-23 14:27:21 · 74 阅读 · 0 评论 -
剑指offer第七题(Java):用两个栈实现队列
用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目解析队列的特性是:“先入先出”,栈的特性是:“先入后出”当我们向模拟的队列插入数 a,b,c 时,假设插入的是 stack1,此时的栈情况为:栈 stack1:{a,b,c}栈 stack2:{}当需要弹出一个数,根据队列的"先进先出"原则,a 先进入,则 a 应该...原创 2020-03-22 21:55:59 · 87 阅读 · 0 评论 -
剑指offer第六题(Java):矩形覆盖
矩形覆盖题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路矩形覆盖问题,同样的,也是斐波那契的变形应用,再用矩形覆盖时,当竖着放时,剩下的覆盖方法就有f(n-1)种,当横着放时,下面必须再放一个,则剩下的需要f(n-2)种,所以依次累加,仍然是斐波那契的变形//基本和斐波那契数列是一个代码,...原创 2020-03-22 21:17:19 · 65 阅读 · 0 评论 -
剑指offer第六题(Java):变态跳台阶
变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目解析分析这个题目,我们判定肯定是斐波那契数列的变形,我们不妨开始找规律1个台阶----》1种方法2个台阶----》2种方法3个台阶----》4种方法4个台阶----》8种方法5个台阶---->16种方法…以此类推,我们发现了规律,方法...原创 2020-03-22 14:13:12 · 64 阅读 · 0 评论 -
剑指offer第五题(Java):跳台阶
跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目解析青蛙跳台阶的问题也就是斐波那契数列的变形,我们可以通过找规律:1个台阶----》1种方法(1)2个台阶----》2种方法(1、1和2)3个台阶----》3种方法(1、1、1和1、2和2、1)4个台阶----》5种方法(1、1、1、1和1、...原创 2020-03-21 21:50:03 · 63 阅读 · 0 评论 -
剑指offer第四题(Java):斐波那契数列
斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解题思路斐波那契数列(Fibonacci sequence),又称黄金分割数列、“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…它的规律是 :F(n)=F(n-1)+F(n-2)(n>=3,F[1]=1,F[...原创 2020-03-21 21:25:02 · 134 阅读 · 0 评论 -
剑指offer第二题(Java):替换空格
替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路通过构建两个数组,将旧数组中的数据复制进新数组中,遇到空格,就用%20进行填补。需要注意的是一个空格要填进去三个字符,就相当于每多一个空格,数组的长度就会增加2。 public String rep...原创 2020-03-21 20:41:25 · 106 阅读 · 0 评论 -
剑指offer第三题(Java):旋转数组的最小数字
旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路该题主要考察排序算法,解题思路如下public int minNumber...原创 2020-03-21 18:50:17 · 72 阅读 · 0 评论 -
剑指offer第一题(Java):二维数组中查找
二维数组中的查找题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路在一个二维数组中,如果我们一个一个进行遍历的话会十分麻烦,所以我们采取另一种方式。由于数组是按照递增顺序排列的,所以我们可以从右上角开始进行查找,如若右上角的数字...原创 2020-03-21 15:49:41 · 86 阅读 · 0 评论