剑指offer
文章平均质量分 72
Ginsai
这个作者很懒,什么都没留下…
展开
-
二维数组中的查找
二维数组中的查找原创 2017-07-16 22:19:00 · 262 阅读 · 0 评论 -
替换空格
题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路:如果从字符串头部开始遍历,每个遇到一个空格,都需要变成“%20”,同时还需要把空格后的所有字符往后移动两位,复杂度太高。遍历旧数组两次,第一次找出空格的个数,确定新字符串的总长度。第二次从旧字符串的末尾往头部遍历,从新字符串的末尾原创 2017-07-16 23:01:28 · 311 阅读 · 0 评论 -
从尾到头打印链表
题目:输入一个链表,从尾到头打印链表每个节点的值。 思路:将每个节点的值存入栈中,再依次出栈打印。也可以使用递归来解决。 代码如下: /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this原创 2017-07-17 00:06:55 · 245 阅读 · 0 评论 -
斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n 思路:使用递归,f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)每次返回前两项之和。这种方法重复计算了值,效率很低,数字过大还可能栈溢出,可以使用动态规划来进行优化。使用循环可以极大提升时间效率。代码如下。 代码:递归,可以用动态规划优化 public class Solution {原创 2017-07-23 20:30:13 · 279 阅读 · 0 评论 -
用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 代码: import java.util.Stack; public class Solution { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void push(int nod原创 2017-07-22 16:47:10 · 294 阅读 · 0 评论 -
重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 代码:/** * Definition for binary tree * public class TreeNode { * int va原创 2017-07-22 16:14:33 · 282 阅读 · 0 评论 -
旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 代码: import java.util.ArrayList; public class Soluti原创 2017-07-23 20:00:19 · 305 阅读 · 0 评论 -
二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解法1: 思路:1与该数相与,如果不为0,说明最末位上的数字为1。1左移一位,与该数相与,如果不为0,说明倒数第二位上的数字为1。将1继续左移与该数比较,统计1的个数。注意:不能让该数往右移的方式来与1比较,因为负数往右移,高位会补1,就会陷入死循环。 代码: public class Solution { p原创 2017-07-24 01:04:58 · 311 阅读 · 0 评论 -
数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路:一看就能想到的方法是:使用循环,指数多少就循环乘多少次得出结果。 需要注意的是:1、底数为0且底数;2、由于底数是double类型,可能不能精确表示,所以可以判断(底数-0.0)的值是否>-0.000001或者考虑底数正负的情况。 一种相对好点的方法是:x为奇数时,a^原创 2017-07-27 01:55:22 · 317 阅读 · 0 评论