
剑指offer
mkfka
这个作者很懒,什么都没留下…
展开
-
剑指offer——有关链表的算法题详解
有关链表的算法题1、链表的倒数第K个结点2、从尾到头打印链表(递归和非递归)3、链表有关环的算法题3.1 如何判断一个链表有环3.2 计算链表中环的大小3.3 链表中环的入口结点4、反转链表5、两个链表的第一个公共结点6、合并两个排序的链表7、单链表在时间复杂度为O(1)删除链表结点8、从尾到头打印链表9、孩子们的游戏(圆圈中最后剩下的数)1、链表的倒数第K个结点题目描述:输入一个链表,输出该链表中倒数第k个结点。方法一:倒数,可以利用栈去存储链表的所有结点,然后出栈K个结点,第K个就是倒数第K个结点原创 2020-07-11 11:27:26 · 229 阅读 · 0 评论 -
剑指offer——表示数值的字符串以及常用正则表达式的应用
题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。解题思路:利用java内置API进行判断,利用将字符串解析为制定类型的变量。利用正则表达式进行判断方法一:使用double浮点型的包装类Double中的方法,如:parseDouble、valueOf方法。使用方法校验,失败抛异常,在catch中原创 2020-07-05 01:27:23 · 147 阅读 · 0 评论 -
剑指offer——从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。输入准备:解题思路:将以上二叉树按照行打印,输出的正确结果应该是[[1], [2, 3], [4, 5, 6, 7], [8, 9]].可以借助两个集合list与tempList去保存某一行的所有行结点(如第二行的【2,3】),保存list集合中的每一个结点的val,然后将list集合赋值为其子节点(list变为【4,5,6,7】),直到list集合为null,停止。代码如下:private static ArrayList<原创 2020-07-03 01:32:39 · 981 阅读 · 0 评论 -
剑指offer——在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。方法一已知数组为n,每一个数组都不超过n,根据这个条件,想要找出重复的数,我们可以新建一个boolean型数组,制作一张hash表,hash函数y=x,也就是将数组中的数作为Boolean型数组的下标值,相同的两个数在Boolean型数原创 2020-07-02 23:38:10 · 1456 阅读 · 0 评论 -
剑指offer——给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。读完题目画出如下图所示示意图。分情况讨论题目中树中的结点会是哪些点。不同的点按照中序遍历的下一个结点也不一样。根据图中所示,大致将结点分为以下几种情况:1、当前结点有右子节点,且其右子节点 (1)有最左子节点,则下一个结点为最左子节点,如图中的结点1的下一个结点为结点6 (2)无最左子节点,则下一个结点为当前结点的右结点...原创 2020-07-01 00:56:35 · 554 阅读 · 0 评论 -
剑指offer——异或的应用详解
什么是异或? 异或是一种基于二进制的运算,常用符号XOR或者^表示。 异或的运算法则就是二进制位相等则取0,不相等则取1。 异或运算的性质 异或运算常用的性质如下: 交换律。即a^b = b^a; 结合律。即a^b^c = a^(b^c); 对于任何数x,都有a^a=0,a^0=a,进一步推出a^b^b=a;(此性质可用来加密) 异或的应用 求二进制数中1的个数 此题很简单,让二进制数中的每一位取异或“1”,如果异或结果为0,则count++,最后..原创 2020-06-30 00:01:14 · 335 阅读 · 0 评论 -
剑指offer——会了这题offer就稳了,输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
以后先来无事做可以在牛客网上刷刷一下编程题,今天刷到了一题有关数组的题目,记忆中有同学在面试中被问到了,话不多说,先看题,题目如下:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。像这种算法题,真的不建议一上来就巴拉巴拉开始写代码,最主要的还是先要明白题目的意思,理清思路,然后在编程。这道算法题我觉得就是一个很典型的例子。很多同学看到题目,可能就在纠结,和为S,先遍历数组呀,然后用一个临时变量去存储满足和为S的两个数的乘原创 2020-06-24 01:51:52 · 558 阅读 · 0 评论 -
剑指offer——和为S的连续正数数列
今天在牛客网上刷剑指offer,遇到一个跟上篇博客有相似之处的算法题。先附上上一篇博客的链接。剑指offer——输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,原创 2020-06-26 01:42:42 · 190 阅读 · 0 评论