剑指offor
文章平均质量分 86
杨柳_
Java服务端研发,喜欢底层原理与基础算法设计
展开
-
【剑指offer - C++/Java】1、二维数组中的查找
题目链接:二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路两种思路方法1把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案。时间复杂度是nlognjava代码:public class So...原创 2018-11-02 01:40:18 · 888 阅读 · 0 评论 -
【剑指offer - C++/Java】8、跳台阶
在线题目链接:跳台阶1、题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。2、题目分析首先我们定义f(n)为跳到n级台阶时需要的跳法。那么我们可以这样想:想要跳到n级台阶,只能从n-1级台阶跳上来或者从n-2级台阶跳上来。所以f(n)=f(n-1)+f(n-2),很明显。这又是斐波那契数列的公式。只不过在这里f(...原创 2018-12-19 12:08:23 · 732 阅读 · 2 评论 -
【剑指offer - C++/Java】7、斐波那契数列
在线题目链接:斐波那契数列1、题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=392、题目分析有高中的数学知识,就应该知道斐波那契数列是这样的:1,1,2,3,5,8…如果f(n)代表斐波那契数列第n项的值,那么:既然我们已经可以得出公式了,那就很好写代码。最容易明白的就是递归了,上面的公式其实就是一个递归的...原创 2018-12-19 12:07:54 · 569 阅读 · 0 评论 -
【剑指offer - C++/Java】14、链表中倒数第k的节点
在线题目链接:链表中倒数第k的节点1 题目描述输入一个链表,输出该链表中倒数第k个结点。2 题目分析这道题比较简单。常规做法是先求出链表的总的节点个数n,然后再从头开始找第n-k+1个节点,这个节点就是倒数第k个节点。这种方法很好实现。还有一种比较巧妙的解法:指定两个指针p和q指向链表头,让p先走k-1步,然后当p走了k-1步之后,q也开始从头开始往后走。那么此时p与q之间的距...原创 2018-12-19 23:11:22 · 223 阅读 · 0 评论 -
【剑指offer - C++/Java】13、调整数组顺序使奇数位于偶数前面
在线题目链接:调整数组顺序使奇数位于偶数前面1 题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。2 题目分析2.1 方法1这道题很简单,常规的做法是开一个数组arr,遍历两边原数组,第一遍找到所有的奇数,依次存入arr,第二遍找到所有的偶数,依次存到arr...原创 2018-12-19 22:18:49 · 339 阅读 · 0 评论 -
【剑指offer - C++/Java】12、数值的整数次方
在线题目链接:数值的整数次方1 题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。2 题目分析2.1 方法1 循环常规做法是直接写一个循环,让exponent个base相乘即可。这里我们主要要注意的是exponent可能小于0。所以要考虑这种情况,代码还是很好写的:3.11 Java代码public class...原创 2018-12-19 21:58:48 · 382 阅读 · 2 评论 -
【剑指offer - C++/Java】11、二进制中1的个数
在线题目链接:二进制中1的个数1 题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。2 题目分析2.1 方法1这道题看起来很简单。假设输入的整数是n。只需要将n与1进行相与运算,看结果是不是0,然后再将n右移,再循环上述步骤直到n=0为止。看起来是这样,但是这样做存在一定的问题。题目中明确说出n可能为负数,如果将负数右移,那么高位会被符号1填充,这就导致结果不正...原创 2018-12-19 17:22:44 · 5239 阅读 · 2 评论 -
【剑指offer - C++/Java】10、矩形覆盖
在线题目链接:矩形覆盖1 题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?2 题目分析乍一看感觉无从下手!!!其实如果我们使用归纳方法的话,总能够总结出规律来。假设下面是一个2*n的大矩形:我们要使用下面这样的2*1的小矩形来填满上述的大矩形:我们假设将2*n的矩形填满需要f(n)种方法那么填充...原创 2018-12-19 15:37:13 · 759 阅读 · 0 评论 -
【剑指offer - C++/Java】6、旋转数组的最小数字
题目链接:旋转数组的最小数字1、题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。2、题目分析从头遍历到尾找到最小值这种low的方法就不说了,是个人都会!!!...原创 2018-11-28 00:42:11 · 631 阅读 · 0 评论 -
【剑指offer - C++/Java】5、用两个栈实现队列
牛客网题目链接:用两个栈实现队列题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。1、题目分析首先我们知道数据结构中栈与队列的特性是:栈:数据先进后出队列:数据先进先出假设现在队列的两个基本操作为push与pop,两个辅助的栈为stack1与stack2。那么可以这实现队列的性质:当我们push数据的时候,只把数据往stack1中压入...原创 2018-11-27 22:56:19 · 783 阅读 · 0 评论 -
【剑指offer - C++/Java】4、重建二叉树
牛客网题目链接:重建二叉树题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。1、题目分析题目给出前序遍历和中序遍历,让重建二叉树。由前序遍历特性知前序遍历的第一个节点,肯定是根节点。那么找到了根节...原创 2018-11-14 15:53:19 · 941 阅读 · 1 评论 -
【剑指offer - C++/Java】3、从尾到头打印链表
牛客网题目链接:从尾到头打印链表题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。本题较为简单。有两种解法:递归和使用栈循环。1、递归解法递归解法,也可以有两种写法。1.1、 递归解法一先上代码,下面给解释:java代码:import java.util.ArrayList;public class Solution { ArrayList&lt...原创 2018-11-08 20:33:27 · 814 阅读 · 0 评论 -
【剑指offer - C++/Java】2、替换空格
题目链接:替换空格题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。注意:C++解法中,给定的字符串结尾后面还有一定的空间,不然我们还得重新给它分配足够的内存空间才能将空格换成%20。在写题过程中,我们需要判断替换后的字符串是否会超过给定的内存空间长度,超过了就直接返回。Ja...原创 2018-11-02 01:48:50 · 824 阅读 · 0 评论 -
【剑指offer - C++/Java】9、变态跳台阶
题目链接:变态跳台阶1 题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。2 题目分析假设f(n)代表青蛙跳上n级台阶的方法数。那么由于一次可以跳1级,也可以跳2级…它也可以跳n级。所以f(n)=f(n-1)+f(n-2)+…+f(1)+f(0);其中f(0)=1;根据这个式子可以写动态规划的算法由上述公式知道:f(n...原创 2018-12-19 12:30:39 · 988 阅读 · 0 评论