
剑指offer
Simmu
这个作者很懒,什么都没留下…
展开
-
剑指offer 14 反转链表
题目描述输入一个链表,反转链表后,输出链表的所有元素。思路运用递归将首尾链表的值相交换。由于java中的函数参数传递,对于普通类型,只是值传递,而对于自定义类,则是引用传递。/*public class ListNode { int val; ListNode next = null; ListNode(int val) {原创 2016-03-29 16:36:50 · 243 阅读 · 0 评论 -
剑指offer 27 字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母思路本来是想用java写的,但是还是对java不是很熟悉,所以还是用c++来写了。首先原创 2016-04-08 15:59:00 · 257 阅读 · 0 评论 -
剑指offer 23 二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路判断是不是二叉搜索树,首先就是要判断左子树是不是都小于根节点,右子树是不是都大于根节点。我们先默认它的后序遍历是合法的,那么直接检查二叉排序树的合法性就好了。public class Solution {原创 2016-04-08 10:25:37 · 311 阅读 · 0 评论 -
剑指offer 33 丑数
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路首先暴力是不行的,就是从1开始往后判断,直到判断的个数为要求的个数,这样时间复杂度太大了。简单的思路是直接生成丑数,不用考虑非丑数的部分,这样的想法是在当前的丑数序列中,已存在的原创 2016-04-09 10:35:05 · 285 阅读 · 0 评论 -
剑指offer 34 第一个只出现一次的字符位置
题目描述在一个字符串(1思路先排序,然后方便用一个map来记录那些出现的次数大于1次的字符,然后再从原始的串遍历,如果这个字符第一次出现且在后面不会再次出现即总共只出现了一次,那么就输出。如果不存在,就输出-1。class Solution {public: int FirstNotRepeatingChar(string str) { if(原创 2016-04-13 08:54:44 · 343 阅读 · 0 评论 -
剑指offer 36 两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。思路由于在最后具有相同的节点,所以可先确定每个链表的长度,因为在最后享有公共的节点,所以将节点链表设置为一样长度,然后从此开始遍历,来确定第一个相同的节点。/*public class ListNode { int val; ListNode next = null; ListNode(int原创 2016-04-13 09:10:23 · 263 阅读 · 0 评论 -
剑指offer 37 数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。思路1.直接遍历,太没有挑战性了。2.二分查找确定该数,然后再二分查找确定比它小的数和二分查找比它大的数。相隔的距离就是该数的个数,但是要注意的是,比它小的最后一个数和比它大的第一个数。1.直接遍历的方法public class Solution { public int GetNumberOfK(int []原创 2016-04-13 09:44:38 · 258 阅读 · 0 评论 -
剑指offer 38 二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路直接递归。遍历左右子树,当遍历到叶子节点的时候,取舍该节点的深度和最大的深度。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right =原创 2016-04-13 09:53:26 · 300 阅读 · 0 评论 -
剑指offer 40 数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路首先遍历整个数组,运用stl中的map来标记已经走过的数,记为ii+1,其中ii为数组下标。那么下次再次遇到,就将这两个数所对应的mark数组的相应位置上标记一下,遍历完,那么没有在mark数组中标记的就是那两个次数只有一次的数。有一点需要在该算法中注意的是存在四个或原创 2016-04-13 10:36:59 · 325 阅读 · 0 评论 -
剑指offer 39 平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。思路直接递归求出每个节点的左右子节点的最长路径,然后比较是否满足AVL树的要求。public class Solution { int judge=1; public int Judge_AVL(TreeNode root){ if(root==null)return 0; i原创 2016-04-13 18:13:57 · 350 阅读 · 0 评论 -
剑指offer 66 机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路运用深度优先搜索,其原创 2016-04-13 19:27:06 · 359 阅读 · 0 评论 -
剑指offer 65 矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符原创 2016-04-13 21:04:30 · 475 阅读 · 0 评论 -
剑指offer 8 跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路和斐波那契数列一样的思路,f(n)=f(n-1)+f(n-2)。public class Solution { public int JumpFloor(int target) { if(target==0)return 0;原创 2016-03-29 09:02:21 · 258 阅读 · 0 评论 -
剑指offer 9 变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路f(n)=f(n-1)+f(n-2)+....+f(1)+f(0).f(n-1)=f(n-2)+f(n-3)+...+f(0)f(n)=2*f(n-1)所以,f(n)=2^npublic class Solution {原创 2016-03-29 09:12:41 · 233 阅读 · 0 评论 -
剑指offer 10 矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路1 1 1 1 1 用1表示这个位置没有被占用,用2表示这个位置被占用,那么如果有一个箱子排在这个地方,那么有两种情况,2 1 1 1 1和2 2 1 1 11 1 1 1 1原创 2016-03-29 09:19:36 · 245 阅读 · 0 评论 -
剑指offer 12 数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路要考虑exponent的正负性。而且,由于base的浮点类型,所以还要考虑base是否等于0的情况。0^0对于为1或者为0都可以接受,那么在此题目中要求的是为1的。因为当exponent为负数时候,最后一步操作会取倒数,要判断取倒原创 2016-03-29 09:54:11 · 212 阅读 · 0 评论 -
剑指offer 30 连续子数组的最大值
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?原创 2016-04-12 10:29:45 · 227 阅读 · 0 评论 -
剑指offer 29 最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路1.先排序,然后直接输出前面需要的最小的数。时间复杂度为O(nlogn)2.冒泡排序,直接冒泡遍历k次。时间复杂度为O(kn)3.快速排序,由于快速排序是先选择一个数,然后将小于这个数的数放在左边,大的数放在右边,所以通过快速排序中的原创 2016-04-12 10:21:49 · 338 阅读 · 0 评论 -
剑指offer 28 数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路按照剑指offer中的思路,首先就是默认数组中已经存在这样的数(即该数的次数为总的次数的一半以上)。那么就在遍历数组的时候,记录一个mark,和次数。当m原创 2016-04-12 09:30:45 · 378 阅读 · 0 评论 -
剑指offer 1 二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入描述:array: 待查找的二维数组target:查找的数字思路:由于从左到右有一定的顺序,从上到下也有顺序,如果单纯暴力则毫无意义。可以先考虑第一行最右边的情况,如果targe原创 2016-03-22 13:59:07 · 300 阅读 · 0 评论 -
剑指offer 2 替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:用StringBuffer中的insert()和deleteChatAt()方法来实现。public class Solution { public String replaceSpace(Strin原创 2016-03-22 14:32:24 · 204 阅读 · 0 评论 -
剑指offer 3 从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。 输入描述:输入为链表的表头输出描述:输出为需要打印的“新链表”的表头思路:用一个递归方法遍历listnode,在递归结束时,将元素添加到ArrayList中。/*** public class ListNode {* int val;* List原创 2016-03-22 15:07:56 · 231 阅读 · 0 评论 -
剑指offer 4 重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路根据前序遍历和后序遍历的规律来进行生成。前序遍历是先遍历根节点,然后再遍历左子树,再遍历右子树。中序遍历是先遍历原创 2016-03-23 15:52:21 · 341 阅读 · 0 评论 -
剑指offer 5 用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路先用栈1存储队列中需要插入的数据,如果需要pop,那么就必须将栈1中的数据放入栈2中(第一次pop)。那么栈2中的栈顶元素就是队列中的第一个元素。由于现在栈1中没有元素了,元素都在栈2中,再次pop的话,那么也是pop栈2中的栈顶,也相对于队列中的第二个元素。那如果需要插原创 2016-03-23 16:09:00 · 259 阅读 · 0 评论 -
剑指offer 6 旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。思路首先由于是旋转之后的数组,所有前面的数字是越来越大,然后到一个最小的,然后再越来越大。我开始是想用数组的最后一个数字做标记,然后通过mid原创 2016-03-23 19:17:41 · 336 阅读 · 0 评论 -
剑指offer 16 合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路以链表2为模板,将链表1中的元素按照大小插入到链表2中,从而实现总链表的排序。/*public class ListNode { int val; ListNode next = null; ListNode(int val) {原创 2016-04-06 10:37:10 · 203 阅读 · 0 评论 -
剑指offer 17 树的子结构
题目描述输入两颗二叉树A,B,判断B是不是A的子结构。思路由于只是判断树的节点的val的值是不是一样,所以,先判断该节点的值是不是一样,然后再判断子节点的值是不是一样。需要注意的是如果tree2为null,那么返回的是false。/**public class TreeNode { int val = 0; TreeNode left =原创 2016-04-06 12:20:34 · 260 阅读 · 0 评论 -
剑指offer 7 斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。思路递归的方法并不推荐,用循环从最底层算起。public class Solution { public int Fibonacci(int n) { int a,b,c; a=0; b=1; c=0;原创 2016-03-24 11:36:45 · 235 阅读 · 0 评论 -
剑指offer 11二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。1.常规做法,由于要考虑到负数,所以不方便将给定的数字右移,因为如果n为负数,那么右移的话,左边的空缺会被填1,当然,如果n为正数,那么左边的空缺会被填0。所以我们可以先设置mark=1,通过左移mark来遍历n中的1的个数。public class Solution { public int原创 2016-03-24 21:21:45 · 240 阅读 · 0 评论 -
剑指offer 19 顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路可以用dfs中的四个方位来思考,首先是向右走{0,1},然后是向下走{1,0},然后是向左走{0,-1}原创 2016-04-07 17:17:58 · 239 阅读 · 0 评论 -
剑指offer 18
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7原创 2016-04-07 17:19:50 · 202 阅读 · 0 评论 -
剑指offer 20 包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。思路用Arraylist来操作。import java.util.Stack;import java.util.ArrayList;public class Solution { ArrayList list=new ArrayList(); public原创 2016-04-07 19:06:54 · 227 阅读 · 0 评论 -
剑指offer 21 栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。思路首先,观察弹出的序列,那么弹出的相邻的两个数在压入的栈的序列如果之间相隔还有其他的数,那么有可能非法原创 2016-04-07 20:26:26 · 263 阅读 · 0 评论 -
剑指offer 22 从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路模拟队列的压入弹出,用bfs的while循环来模拟递归。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = nul原创 2016-04-07 21:26:40 · 186 阅读 · 0 评论 -
剑指offer 13 调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路冒泡排序一样的思路。如果有奇数和偶数相邻,那么就交换位置,使得奇数在前,偶数在后,而这样做不会使得奇数内部和偶数内部的顺序改变。public class Solution {原创 2016-03-29 10:27:42 · 254 阅读 · 0 评论