剑指offer刷题

1.二维数组中的查找:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
以下代码从二维数组左下角开始,大于目标数,删除整行,小于目标数,删除整列
在这里插入图片描述
2.替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
该题注意替换后字符串长度增加
在这里插入图片描述
3.从尾到头打印链表:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
本题知识点,利用栈的“先进后出”思想。还要注意链表、结构体、栈出、下一节点指向等知识点。
最开始while(head!=NULL)处错将while写为if,运行结果只输出一个数据,(考虑是因为链表内地址不连续造成的???不是很懂,求指教)
在这里插入图片描述
4.重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:前序遍历第一个是二叉树的根,找到根在中序遍历中的位置,中序遍历中根左边为二叉树的左子树,右边为二叉树的右子树(对应左右子树在前序遍历中连续存在)。按该思路继续分别寻找左右子树的根节点,递归进行。
在这里插入图片描述在这里插入图片描述
5.用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
注意:栈“先进后出”,队列“先进先出”
在这里插入图片描述
6.旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
注意:旋转数组的定义,该旋转数组是非减排序数组的旋转,因此该旋转数组可划分为两个排序的子数组,且前面子数组的元素都大于或等于后面子数组的元素。
可用二分法做,但要考虑前后中三个指针均相同的情况。
在这里插入图片描述在这里插入图片描述
7.斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
下面给出了两种方法,第一种方法按公式递归进行,该方案运行时间长,内存消耗较大。第二种方案节省空间,用时少。
在这里插入图片描述
8.跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:第一次跳1阶,还有F(n-1)种方法,第一次跳2阶,还有F(n-2)种方法,因此,F(n)=F(n-1)+F(n-2),转化为斐波那契数列。
在这里插入图片描述
9.变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:第一次跳1阶,还有F(n-1)种方法,第一次跳2阶,还有F(n-2)种方法,第一次跳3阶,还有F(n-3)种方法…因此,F(n)=F(n-1)+F(n-2)+F(n-3)+…F(1)+1=2F(n-1)。
在这里插入图片描述
10.矩形覆盖
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值