剑指Offer
时光时光慢一点
学生狗一枚,努力学习中
展开
-
《剑指Offer》Java实现-二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路 这个题目比较简单,由于二维数组每行是递增的,所以可以先按行遍历,如果第一个元素比target小,那么该行存在这个target。这里加一个try catch部分,是由于有一个测试点为空。 解法 p...原创 2018-04-17 20:38:55 · 152 阅读 · 0 评论 -
《剑指Offer》Java实现-包含min函数的栈
题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 思路 可以通过数组来实现栈的数据结构。然后需要保存最小值,同样可以使用一个数据进行存储。 代码 import java.util.Stack; import java.util.ArrayList; public class Solution { &n...原创 2018-06-19 21:24:01 · 169 阅读 · 0 评论 -
《剑指Offer》Java实现-数值的整数次方
题目 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 这个题目比较简单,主要注意的是要思考全面,指数的正数,负数,以及0的情况。 代码 public class Solution { public double Power(double base, int exponent) { double resul...原创 2018-04-28 21:30:48 · 280 阅读 · 0 评论 -
《剑指Offer》Java实现-二进制中1的个数
题目 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 这个题目的思路很巧妙,如果一个整数不为0,那么这个整数的二进制至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。比如说1110,减1等于1101;进行与运算,得到1100。 代码 publ...原创 2018-04-28 20:54:26 · 113 阅读 · 0 评论 -
《剑指Offer》-Java实现-变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级跳1级,剩下n-1级,则剩下跳法是f(n-1)。 所以f(n)=f(n-1)+f(n-2)+…+f(1) 因为f(n-1)=f(n-2)+f(n-3)+…+f(1) 所以f(n)=2*f(n-1) 代码...原创 2018-04-28 20:22:43 · 241 阅读 · 0 评论 -
《剑指Offer》Java实现-斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 思路 很基础的题目,有递归和非递归两种实现思路。 代码 递归算法 public class Solution { public int Fibonacci(int n) { if(n==0) ...原创 2018-04-22 21:59:17 · 340 阅读 · 0 评论 -
《剑指Offer》 Java实现-旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路 首先肯定存在O(N)的解法。但是这种解法肯定不是最优的。对于这种绝大多数是有序的数组,可以采用...原创 2018-04-22 21:13:40 · 109 阅读 · 0 评论 -
《剑指Offer》Java语言-用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路 这个题目有几种思路。第一种,把第二个栈作为辅助空间。当push操作时,压入到第一个栈中。当要pop操作的时候,将元素从第一个栈中弹出到第二个栈中,然后出栈一个元素。然后再将元素入栈到第一个栈中。时间效率为O(N^2)第二种思路:两个栈互相作为辅助空间。入栈操作到第一个栈中,然后出栈的时候,如...原创 2018-04-22 20:19:23 · 119 阅读 · 0 评论 -
《剑指Offer》Java语言-从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值。 思路 这个题目可以利用栈先进后出的性质来完成。 代码 import java.util.*; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode lis...原创 2018-04-18 16:04:19 · 194 阅读 · 0 评论 -
《剑指Offer》Java实现-重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路 前序遍历的第一个节点,肯定是根节点。找到在中序遍历中的根节点位置。左面的值就是左子树,右面的值就是右子树。根据这个可以进行递归。就能重建...原创 2018-04-22 19:19:02 · 121 阅读 · 0 评论 -
《剑指Offer》Java实现-替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路 这个题目看起来比较简单,但是想要做的AC,需要考虑的情况比较多。1.空字符串 2.只有空格的字符串,3.最后一个字符或第一个字符为空格的情况。 代码 public class Solution { pub...原创 2018-04-17 21:07:07 · 151 阅读 · 0 评论 -
《剑指Offer》Java实现-输出链表的倒数第K个节点
题目描述 输入一个链表,输出该链表中倒数第k个结点。 思路 使用两个指针p1和p2,都指向头部。p1指针先走 k-1 步,到达第 k 个节点。然后两指针同时走,当p1指针到达末尾时,p2指针在倒数第 k 个节点上。 代码 /* public class ListNode { int val; ListNode next = null; ListNode(...原创 2018-07-09 23:33:26 · 163 阅读 · 0 评论