剑指 offer题目

2、请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

解题方法:
(1)暴力法,创建新的字符串stringbuffer,遍历字符串进行替换。
(2)双指针,扩大原stringbuffer大小,从后向前遍历,从旧的字符串stringbuffer的位置,拷贝到新的位置

3、输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题方法:利用栈实现

4、给你一根长度为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。

**解题方法:**举例发现规律,举例(2,3,4,5,6,7,8,9,10),发现2-6之间是切成两截是最大的,并且能对半的就对半,不能对半就按照最大对半截,例如5(2*3)。而大于7之后就是切成3截最大,并且是平均切相乘最大。

5、输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tqId=11157&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
解题方法:
递归实现左右树的遍历。数组拷贝
关键需要借助的接口,数组的拷贝
import java.util.Arrays;
Arrays.copyOfRange(src,start,end) // 左闭右开

6、输入一棵二叉树,判断该二叉树是否是平衡二叉树。

https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tPage=2

解题方法:
1、方法1:递归求左右子树高度,相减绝对值小于1.然后递归求左右子节点的值。
这样做,求高度会进行一次遍历。递归求是否是平衡二叉树又会遍历一次。遍历了两次

2、方法2:递归求是否是平衡二叉树时传递保存高度的对象,然后计算高度。只计算一次。多一个对象消耗。java是引用传递。

发布了18 篇原创文章 · 获赞 2 · 访问量 3149

猜你喜欢

转载自blog.csdn.net/shiningdreamercaihua/article/details/104449328