随笔分类 -  剑指offer的题目

摘要:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路一:等差数列求和公式:n*(n+1)/2=(n^2+n)/2,由于不能用除法,因此可以右移一位表示除以2 思路二: &&的短路功能:即A&&B中,加入A 阅读全文
posted @ 2019-07-09 11:08 淡如水94 阅读(875) 评论(0) 推荐(0)
摘要:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路来自于牛客网 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2。 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。 第三步:重复上述两步, 阅读全文
posted @ 2019-07-09 10:07 淡如水94 阅读(207) 评论(0) 推荐(0)
摘要:题目要求:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路一: Floyd环判定算法 使用fastptr和sloeptr两个速度不相同的指针,一旦它们两个进入链表中的环,就肯定会相遇 时间复杂度O(n) 空间复杂度O(1) 错误代码:没有看清楚题目啊?不是让你判断链表 阅读全文
posted @ 2019-07-08 11:44 淡如水94 阅读(143) 评论(0) 推荐(0)
摘要:题目要求:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路一:递归的方式 时间复杂度为O(n) 空间复杂度为O(n) 该方法存在堆栈溢出的风险,树的深度如果非常非常非常大 是会出现栈的溢出的 思路二:利用层次遍历,层的数目 阅读全文
posted @ 2019-07-08 10:36 淡如水94 阅读(120) 评论(0) 推荐(0)
摘要:题目要求:输入两个链表,找出它们的第一个公共结点。 这个题目有很多个思路, 假设链表一长度为m,链表二长度为n 思路一: 找出两个链表长度差,然后同时遍历 时间复杂度为O( max{m,n}) 空间复杂度为O(1) 但是代码太多了,敲着真得很不爽 1 /* 2 public class ListNo 阅读全文
posted @ 2019-07-07 11:55 淡如水94 阅读(167) 评论(0) 推荐(0)
摘要:题目要求:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 方法一: 用键值对 hashmap是根据hash值来存储的,而linkedhashmap底层是链表,可以根据顺序存储。比如说输入c,a,h 阅读全文
posted @ 2019-07-03 12:18 淡如水94 阅读(171) 评论(0) 推荐(0)
摘要:题目要求:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 判断方法 首先除2,直到不能整除为止,然后除5到不能整除为止,然后除3直到不能整除为止。最终判断剩余的数字 阅读全文
posted @ 2019-07-02 12:45 淡如水94 阅读(126) 评论(0) 推荐(0)
摘要:题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。 if (root.left != null) Mirror(root.left); if (root.right != null) Mirror(root.right); 最后两个if可以不需要 为啥不需要,加上判断程序不是更稳定么。 不加if 阅读全文
posted @ 2019-07-02 10:25 淡如水94 阅读(93) 评论(0) 推荐(0)
摘要:题目要求:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 比较器就是一个接口,通过实现这个接口重写compare方法,返回正值代表大于返回0代表等于,返回负值代表小于。这 阅读全文
posted @ 2019-07-01 14:09 淡如水94 阅读(154) 评论(0) 推荐(0)
摘要:输入一个链表,输出该链表中倒数第k个结点。 核心思想: 两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点。 然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了 时间复杂度O(n),一次遍历即可 调试中出现的b 阅读全文
posted @ 2019-07-01 10:09 淡如水94 阅读(391) 评论(0) 推荐(0)
摘要:输入一个链表,反转链表后,输出新链表的表头。 主要是三个指针在操控着反转的链表,A - -> B - -> C - -> D - -> E - -> F head一开始指向A nextnode指向了B A指向了prenode也就是空 A和B之间的链断开 head代表的A给了prenode,现在pre 阅读全文
posted @ 2019-07-01 10:05 淡如水94 阅读(562) 评论(0) 推荐(0)
摘要:题目要求:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 阅读全文
posted @ 2019-07-01 09:48 淡如水94 阅读(149) 评论(0) 推荐(0)
摘要:题目要求:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 本张图片借鉴于 https://blog.csdn.net/sodacoco/article/details/81606974 ,真得写得非常好 这个题的难点在于把所有情况都理清 阅读全文
posted @ 2019-06-30 14:40 淡如水94 阅读(145) 评论(0) 推荐(0)
摘要:31 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 阅读全文
posted @ 2019-06-28 15:29 淡如水94 阅读(356) 评论(0) 推荐(0)
摘要:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。 //f(2-2) 可以 阅读全文
posted @ 2019-06-28 11:07 淡如水94 阅读(164) 评论(0) 推荐(0)
摘要:官方正规的数学界的斐波那契数列的定义: 波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上 阅读全文
posted @ 2019-06-28 10:15 淡如水94 阅读(229) 评论(0) 推荐(0)
摘要:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2} 阅读全文
posted @ 2019-06-27 14:18 淡如水94 阅读(164) 评论(0) 推荐(0)
摘要:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路一:暴力求解 思路 阅读全文
posted @ 2019-06-27 10:46 淡如水94 阅读(222) 评论(0) 推荐(0)
摘要:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 阅读全文
posted @ 2019-06-27 10:30 淡如水94 阅读(110) 评论(0) 推荐(0)
摘要:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 阅读全文
posted @ 2019-06-27 10:28 淡如水94 阅读(130) 评论(0) 推荐(0)