![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
coder_flag
南昌大学软件工程专业学生。
展开
-
从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。(层序遍历)思路: 使用队列这种数据结构,利用先进先出这种特性。import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;public class PrintFromTopToBottom { public clas...原创 2019-05-13 19:36:11 · 91 阅读 · 0 评论 -
二叉树的下一个结点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解法:如图所示,可以归纳出两种情况:1)给定节点有右儿子,则下一个节点是右儿子的最左边儿子 ,2)给点节点没有右儿子,则一直找到当前节点的父节点是其父节点的左儿子的节点,比如(j,H 节点)。代码如下:class TreeLinkNode ...原创 2019-06-15 23:09:57 · 93 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:开局一张图。。。。其实主要就是按照中序遍历的过程,把树的节点递归连接成双向链表。public class Convert { public class TreeNode { int val = 0; TreeNode l...原创 2019-05-17 19:48:29 · 159 阅读 · 0 评论 -
把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路因为前几天刷过这道题:字符串的顺序排列,想到其实这题做法也是排列组合出各种可能的数字,然后比较大小,取其最小的即可。public class Solution { //输入一个正整...原创 2019-05-22 10:30:27 · 163 阅读 · 0 评论 -
整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。思路:主要思路就是把数字转成字符串来处理,对每个数字字符串遍历期中1的个数...原创 2019-05-22 09:44:11 · 133 阅读 · 0 评论 -
最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:构建一个k大小的大根堆,遍历input数组,在堆未满时,直接存入元素,在堆已满时,则比较堆顶元素与带插入元素,若带插入元素更小,则替换堆顶元素。import java.util.ArrayList;import java.util.Comparat...原创 2019-05-22 09:20:19 · 95 阅读 · 0 评论 -
复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:1.先把每个节点复制出一个节点并把每个复制出的节点连接到原来节点后面2.把原来每个节点的random指针复制到对应复制出的节点上3.把每个复制出来的节点分离出来...原创 2019-05-16 17:40:26 · 127 阅读 · 0 评论 -
在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。思路:主要是在链表是多节点并且要删除的节点非尾部节点时,可以使要删除的节点的下一个节点的值覆盖掉要删除节点的值,然后删除下一个节点,这个操作是O(1)复杂度,而删除节点为头节点是O(1)复杂度 ,删除节点为尾部节点的时间复杂度是O(n)。 所以O(1)时间复杂度 : ( O(1)*(n-1) + O(n) )...原创 2019-05-16 17:36:00 · 168 阅读 · 0 评论 -
字符串顺序排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:题目咋一看没思路,可以尝试着写几个字符串,推导一下各种可能,然后从中找找思路。比如abc 的组合,先想以a开头,以b开头,以c开头,在确定好了第一个字母的前提下,再按同样的步骤,确定第二个字母,以此类推。...原创 2019-05-21 11:33:23 · 1806 阅读 · 1 评论 -
调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。自己思路:感觉这是直接一眼想到的思路。有什么错误求指正!!谢谢使用列表存储偶数,然后把所有奇数顺序移到数组前面,剩余空间放入列表中的偶数。时间复杂度是O(n),空间复杂度也是O(n)(空间复杂度应该可以优化,先判...原创 2019-05-11 13:01:59 · 123 阅读 · 0 评论 -
栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路: 利用一个辅助栈空间,根据第二个弹出序列来对整个压栈过程进行模拟。public...原创 2019-05-15 14:25:22 · 138 阅读 · 0 评论 -
层序遍历二叉树类型
1.从上往下打印二叉树(层序遍历)题目: 往下打印出二叉树的每个节点,同层节点从左至右打印。思路:使用队列的先进先出的特性,在把队列中的节点取出同时把它的儿子插入队列,从而实现按层顺序打印。 //层序遍历 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { Queue<T...原创 2019-06-16 23:12:15 · 180 阅读 · 0 评论