
剑指offer
剑指offer
hestyle
戎码一生!
展开
-
剑指offer 反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路:\color{blue}解题思路:解题思路:非常简单的题,只是涉及到指针,有些不是很理解的指针的可能会比较懵,请看下图。第1步:将newPHead指向pHead,然后pHead后移,最后newPHead->next需要置空(翻转后链表的尾节点的next肯定要置NULL,否则产生了野指针)第2步:使用tempPtr指向p...原创 2020-03-19 22:16:39 · 382 阅读 · 0 评论 -
剑指offer 剪绳子
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描...原创 2020-03-17 21:11:56 · 459 阅读 · 0 评论 -
剑指offer 链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路:\color{blue}解题思路:解题思路:由于这是单链表,只能往一个方向遍历,因此第一想法可能是先遍历一遍链表,计算一下链表节点的总个数n,再从头开始走n - k个节点就是倒数k个节点。这种思路并没有啥毛病,不过有一种只访问一遍的思路。使用resPtr、kAfterPtr两个指针,kAfterPtr比resPtr先除法k个节点。...原创 2020-03-17 16:46:31 · 399 阅读 · 0 评论 -
剑指offer 调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路:\color{blue}解题思路:解题思路:注意这道题要求我们把奇数、偶数分开,并且奇数的相对顺序、偶数的相对顺序不发生改变。 所以不能简单的交换偶数、奇数,只能将相邻的位置进行交换,算法的复杂度初步估计在O...原创 2020-03-15 17:25:45 · 423 阅读 · 0 评论 -
剑指offer 二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路:\color{blue}解题思路:解题思路:这道题有一个公式 n &= (n - 1),也就是计算n的二进制表示1的个数,只要循环使用上面的公式,直到n为0。这个公式不知道就记住即可,下面用个示例简单验证一下公式的正确性,不是很严谨。假设 n = +127,则二进制形式为"0111 1111"(假设长...原创 2020-03-15 16:14:46 · 329 阅读 · 0 评论 -
剑指offer 变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路:\color{blue}解题思路:解题思路:在上一题 剑指offer 跳台阶,题目规定一步只能跨1阶或者2阶,最后得出递推式f(n) = f(n - 2) + f(n - 1)。而本题中,告诉我们一步可以跨[1,2,3, ..., n]阶,那么到达第n阶台阶总共有n...原创 2020-03-14 20:00:42 · 385 阅读 · 0 评论 -
剑指offer 跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路:\color{blue}解题思路:解题思路:这道题其实也是一道斐波拉契尔数列应用的题,只是换了个马甲。到达第n阶台阶有两种可能,一种是从第n - 2阶台阶一步跨两阶到达n,另一种是从第n - 1阶台阶跨一阶到达n,因此得出递推公式f(n) = f(n - ...原创 2020-03-14 19:24:53 · 356 阅读 · 0 评论 -
剑指offer 斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解题思路:\color{blue}解题思路:解题思路:斐波拉契尔数列,递推式f(n) = f(n - 2) + f(n - 1)。没啥好说的吧,直接递推计算即可。代码实现:\color{blue}代码实现:代码实现:class Solution {public:...原创 2020-03-13 16:10:25 · 399 阅读 · 0 评论 -
剑指offer 旋转数组的最小数字(变形二分搜索)
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路:\color{blue}解题思路:解题思路:这道题让我们在一个特殊的数组中找最小值,这个特殊的数组...原创 2020-03-13 15:51:38 · 377 阅读 · 0 评论 -
剑指offer 用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路:\color{blue}解题思路:解题思路:稍微知道一点数据结构的道友都知道栈的特性是先进后出,队列的特性是先进先出。这道题只给我们两个栈,让我们去实现队列先进先出的功能。最直白的思路是每次push操作时,直接入栈statck1栈顶。每次pop操作时,把stack1中的元素依次出栈放入...原创 2020-03-12 21:45:34 · 396 阅读 · 0 评论 -
剑指offer 重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路:\color{blue}解题思路:解题思路:与 LeetCode 从前序与中序遍历序列构造二叉树(递归+图解) 一毛一样。前序遍历:先根节...原创 2020-03-12 20:25:34 · 351 阅读 · 0 评论 -
剑指offer 从尾到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路:\color{blue}解题思路:解题思路:由于题目给定的是单链表,所以无法从尾端 --> 起始端访问。但是我们可以借助栈实现元素的逆序输出,栈的特性是先进后出,第一步,我们访问一遍链表,将所有元素依次进栈。最后再将栈中的元素依次出栈,得到的逆序的链表节点元素。还有一种思路,就是获取到正向的序列后,直接...原创 2020-03-11 16:34:30 · 375 阅读 · 0 评论 -
剑指offer 替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:\color{blue}解题思路:解题思路:这道题可能会有一部分道友选择从左->右访问,依次替换空格,但是由于%20长度为3,所以每次需要把后面的字符右移2个位置。这种思路移动次数明显有些多余,其实可以一步移动到...原创 2020-03-11 16:21:34 · 338 阅读 · 0 评论 -
剑指offer 二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:\color{blue}解题思路:解题思路:这道题最容易想到的思路是暴搜,时间复杂度为n * m,但是这样显然没有利用从左到右递增、从上到下递增的排列顺序,体现不出算法的高效性。这道...原创 2020-03-11 15:51:28 · 349 阅读 · 0 评论