题目: 面试题03. 数组中重复的数字 题解: 1. 题解一: 使用flag数组统计每个数字出现的次数,只要数字出现重复,对应的flag数组的统计值必然大于1,此时,直接返回nums[i]的值即可。 2. 题解二: 代码: 1. 代码一: 2. 代码二: 参考: 面试题03. 数组中重复的数字 Java中Set集合的使用 Java集合–Set(基础) Java集合–List...

这里使用java进行最优的直接写法,其实关于单例模式最基本的就是懒汉式和饿汉式,其中饿汉式是一种最简单但是比较占内存的一种方式。懒汉式是一种需要多重考虑多线程的一种方式。但是java最大的特点是可以使用静态内部类的方式获取单例,借助两方面的优势。 测试...

【剑指offer】给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。java实现 方法一:复制HashMap 方法二:快慢指针 主函数: 快慢指针思路: 设定两个指针,一个慢指针,一个快指针,快指针的速度是慢指针的两倍,如果有环,他们一定会在环中相遇。 (1) 如果这时快指针已经是在环里走了一圈了(这种情况对应于非环指针较短的情况),如下所示: 根据上图,可以得到下面的关系...

文章目录 题目描述 思路与解答 题目描述 输入一个链表,反转链表后,输出新链表的表头。 思路与解答 首先,使用循环解答,不断把指向下一个的指针,指向前面的。假设链表是1->2->3->4,那么执行一次循环里面的内容的图示如下: 直到head==null的时候,返回first即可。 还有一种方法,是头插法,也就是先初始化一个listNode,初始化为0->null;然后遍历链...

题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路描述 首先需要知道什么是对称二叉树。以及他的镜像是什么样的。 其次是,明白这样多次的遍历左右子树,肯定是要用到递归的思想来解决的。递归,真就是想到了就很简单,理解起来也很简单。但没想到突破点,真的是想破脑袋也不会明白。 这里就采用的是,同时递归左右子树,来获得最终结果。 代...

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。 思路解析 这里使用的是Link...

题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路解析 这个方法不是自己的,但是确实解法很巧妙因此就以此方法作为博客内容了。 原方法地址:https://blog.nowcoder.net/n/deaa284f105e48f49f38b5d7cb809cd7?f=comment 思路描述: 假设链表结构如下: 首先判断是否是环。设置两个指针,fasth和sl...

题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路解析 但不能使用加减乘除进行运算的时候,其实意思就是叫用计算机底层的按位与&,按位或|, 按位异或^进行实现。 举例:5的二进制是101,3的二进制是011。 两个二进制的相加结果是用一个异或门实现的; 两个二进制的进位结果是用一个与门来实现的。 而我们在计算101+011d的时候就需要将其进行异...

题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小...

题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 由于存在矩阵每行和每列的数据都是递增的,所以我们可以从最小的元素所在的位置或是最大的元素所在的位置,即二维数组的左下角或是右上角开始查找。若当前位置的元素小于查找的数时,行数加1;否则列...

树的子结构

剑指offer

  

2019-06-03 05:02:12

第十六题:判断是否为树的子结构   题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)    解析:            rootA     rootB           ①判...

题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路:倒数第k个结点就是正数第n-k+1个结点,其中n是链表的长度。这里我们就需要先遍历链表得到它的长度。然后第二次遍历找到第n-k+1个就是倒数第k个结点。 思路2:可以定义两个指针,一个快指针,一个慢指针。快指针先向前走k-1步,慢指针不动,从第k步开始,两个指针一起走。当快指针走到尾结点时,慢指针恰好走到倒数第k个。   &nb...