![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
《剑指offer》习题
weixin_43787331
手和脑袋的距离决定了理想和现实的差距
展开
-
数组中重复的数字
题目:在一个长度为n的数组里,所有的数字都在0~n-1范围内,请找出任意一个重复的数字。思路:排序将数组排序,然后扫描排序后的数组即可。时间复杂度:O(nlogn),空间复杂度:O(1)哈希表从头到尾扫描数组,每扫描到一个数字,判断该数字是否在哈希表中,如果该哈希表还没有这个数字,那么加入哈希表,如果已经存在,则返回该数字;时间复杂度:O(n),空间复杂度:O(n)交换0~...原创 2019-04-26 16:35:46 · 65 阅读 · 0 评论 -
5.30练习
单例模式:// 单例设计模式// 设计一个类,只能生成该类的一个实例/** * 非线程安全的单例模式,只能用于单线程 * @author 杨飞 * */public class Singleton { //变量定义为私有属性 private static Singleton ourInstance; //得到实例的方法 public static Singleton get...原创 2019-05-30 11:05:01 · 160 阅读 · 0 评论 -
包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。思路:要使时间复杂度是O(1),需要每次压入一个新元素进栈时,将栈里的所有元素排序,让最小的元素位于栈顶。但是这种想法不能保证最后压入栈的元素能够最先出栈,因为这个数据结构已经不是栈了。于是借助于一个辅助的成员变量来存放最小的元素。每次压入一个新元素进...原创 2019-04-20 10:13:00 · 69 阅读 · 0 评论 -
顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。分析:循环结束的条件。第一圈左上角为(0,0),第二圈左上角为(1,1),左上角的行列坐标相同,于是我们可以在矩阵中选取左上角为(start,start)的一圈作为分析的目标。循环继续的条件。对于55矩阵,最后一圈只有一个数字,坐标为(2,2),且5>22;对于66矩阵,最后一圈有4个数字,左上角为(2,2),且...原创 2019-04-20 09:52:49 · 311 阅读 · 0 评论 -
对称的二叉树
实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和他的镜像一样,那么它是对称的。、思路1:可以仿照二叉树的镜像,先找出该二叉树的镜像,再和原二叉树比较。思路2:我们可以定义一种对称前序遍历算法,即先遍历父节点,再遍历右、左节点。假如前序遍历得到的序列和对称前序遍历得到的相同,那么该二叉树就是对称的。public class Test { public static b...原创 2019-04-20 09:26:17 · 62 阅读 · 0 评论 -
找到字符串中第一个只出现一次的字符
import java.util.Scanner;/** * 找到字符串中第一个只出现一次的字符 * @author 杨飞 * 用双重循环模仿冒泡法找到重复的位置并标记,输出没有标记的第一个字符 */public class Main { public static void main(String[] args) { // TODO Auto-generat...原创 2019-04-24 17:46:11 · 429 阅读 · 0 评论 -
字符串排序
import java.util.Scanner;/** * 对输入字符串进行排序 * * @author 杨飞 * 循环依次找出a~z(排好序了), 不是a~z的插入到原来的位置 */public class Main { public static void main(String[] args) { // TODO Auto-generated method stu...原创 2019-04-24 17:15:36 · 100 阅读 · 0 评论 -
删除字符串中出现次数最少的字符
import java.util.Scanner;/** * 删除一个字符串中出现次数最少的字符 * @author 杨飞 * 遍历一次把字符出现的次数保存在数组num[]中 * 找到num[]中最小的数min * 最后遍历一次num[]不等于min则输出 */public class Main { public static void main(String[] args) {...原创 2019-04-24 16:51:57 · 154 阅读 · 0 评论 -
《剑指offer》——二叉树的镜像
二叉树的镜像题目:请完成一个函数,输入一棵二叉树,该函数输出他的镜像。分析求镜像的步骤:两棵树的根节点相同,但他们的左右两个子节点交换了位置。因此,我们可以先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶节点的左右子节点之后,就得到了树的镜像。方法:使用递归或非递归方式交换每个节点的左右子树位置。递归思路1:如果当前节点为空,返回,否则交换...原创 2019-04-19 22:59:16 · 70 阅读 · 0 评论 -
暑假刷题总结
总结一下我做过的部分剑指offer的题重建二叉树 // 重建二叉树 // 思路:前序遍历第一个是根节点,找到中序遍历的根节点,则找到中序遍历的左右子树,接着找到前序遍历的左右子树,用递归。public class Solution { public TreeNode reConstructBinaryTree(int[] pre, int[] in) { return reBuil...原创 2019-09-05 00:14:49 · 147 阅读 · 0 评论