牛客网-剑指offer67题
欢迎大家共同讨论
TheBetterKong
这个作者很懒,什么都没留下…
展开
-
剑指 offer 汇总
剑指 offer 所有题目的题解已经全部整理至 个人博客 - 剑指 offer 67题,每一题都附有详细的题解分析,欢迎交流;原创 2021-06-10 13:45:19 · 128 阅读 · 0 评论 -
T14-递增序列合并链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路本题思路不难,就是相对来说稍微复杂一点。我最开始想的是,合并的时候,直接把pHead2向pHead1上合并,以此来节省再次开辟新链表的内存空间。具体思路是:先找到pHead1和pHead2的较小者...原创 2020-02-06 18:54:46 · 139 阅读 · 0 评论 -
T13-反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题分析链表反向是链表里面的常见操作;只需要引入两个指针,p1指向当前pHead节点的前一个节点,p2指向pHead节点的下一个节点;接下来就是捋清每次循环时,各个指针的相互关系:注意:首次循环的时候,p1指向的null,而链表的首节点1,反转后...原创 2020-02-06 18:14:24 · 112 阅读 · 0 评论 -
T12-调整数组顺序使奇数在偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路典型的数组排序的题,调整奇数偶数顺序,这里我采用冒泡排序的思想,当然也可以采用其他的类似,插入排序等等,其主要思想不难。...原创 2020-02-01 18:33:11 · 122 阅读 · 0 评论 -
T11-链表的倒数第k个节点
题目描述输入一个链表,输出该链表中倒数第k个结点。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路此题,开始就想到引入一个栈,对链表遍历,并且一次压入栈,之后再从栈中弹出k个节点,即为所求。但是这样虽然只遍历了一遍链表,但是引入栈带来了额外的空间消耗,并不是最佳算法。那么,换个思路,求倒数第k个节点,但是链表只能从头至尾遍历。所以,如果我们能...原创 2020-02-01 15:53:56 · 110 阅读 · 0 评论 -
T10-数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路本题,我刚开始看到题目时,有点没太明白题目的意思。看别人的解析才知道,是int类型的exponent在计算机中用整数表示,然后需要实现这...原创 2020-01-31 18:21:28 · 185 阅读 · 0 评论 -
T9-二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路此题本人一开始的想法就是用1与数字n的最低位相与,然后右移n一位,再与1相与,记录与值为1的次数。但是,再提交检查时,系统提示可能陷入无限循环。这时候我才发现,对于正数来说此方法可行,因为右移时,最高位符号位填充0,不影响...原创 2020-01-31 17:36:44 · 113 阅读 · 0 评论 -
T8-矩形覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路同样是一个找递推关系的题,假设我们已知2n的矩形有f(n)中覆盖方式,这里使用21的矩形去填充,所以我们应该找的是f(n)、f(n+1)、f(n+2)这三者的关系。...原创 2020-01-31 16:59:54 · 85 阅读 · 0 评论 -
T8-跳台阶问题
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路数学的排列组合问题,很容易分析:f(n)=f(n−1)+f(n−2)f(n)=f(n-1)+f(n-2)f(n)=f(n−1)+f(n−2)要想知道跳到n级台阶多少种跳法,那么:从n-1级台阶跳一下到n级,从n-2级台阶跳2级到n级台阶,递归关系就出来了源...原创 2020-01-30 17:36:07 · 112 阅读 · 0 评论 -
T7-旋转数组找最小
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。时间限制:C/C++ 3秒,其他语言6秒空间限制:C/C++ 32M,其他语言64M解题思路最简单的方法...原创 2020-01-30 16:59:58 · 123 阅读 · 0 评论 -
T6-利用栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M解题思路栈的特点:先进后出队列:先进先出利用栈实现队列,也就是每次出栈时,将栈里的元素顺序颠倒一下即可,那么引入一个中间栈就很容易实现了。两个栈(一个入队,一个出队):入队操作:将元素压入栈1出队操作:将...原创 2020-01-30 16:22:26 · 101 阅读 · 0 评论 -
T5-重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M程序代码本题也是二叉树中的一个常见操作,关键在于找到前序,中序...原创 2020-01-28 15:25:03 · 86 阅读 · 0 评论 -
T4-从未到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:1174732解题思路本题是本人在学习链表和栈的时候都遇到过的典型例题,这里不再详细说明。难点在于:链表的遍历只能从头到尾进行,而题目要求从尾向前。这里本人想到的两种常见思路:利用栈先进后出的特点;遍历链表,顺序存...原创 2020-01-21 23:12:09 · 93 阅读 · 0 评论 -
T3-替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M热度指数:1309646分析思路本人在刚开始学习c编程时就遇到过类似的题目,当时,没有不考虑额外的空间开销,直接的思路就是:开辟一个新...原创 2020-01-21 22:37:06 · 86 阅读 · 0 评论 -
T2-斐波那契数列
文章目录题目描述斐波那契数列解题思路题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:726760本题知识点: 递归斐波那契数列每一项数字是前两项之和:1、1、2、3、5、8、13、21、34…解题思路本题相...原创 2020-01-19 23:31:16 · 182 阅读 · 0 评论 -
T1-二维数组中的查找
文章目录题目描述解题思路算法描述补充:常见的查找方法常见的排序方法题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1539496本题知识点: ...原创 2020-01-18 23:58:43 · 294 阅读 · 0 评论