From 4a03ee935a0661c2423dcaf9f18444a3d12e8d3c Mon Sep 17 00:00:00 2001 From: nonstriater <410495266@qq.com> Date: Sat, 28 Nov 2015 12:37:40 +0800 Subject: [PATCH] update format --- 算法问题选编/剑指offer/README.md | 110 +++++++++++++++---------------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/算法问题选编/剑指offer/README.md b/算法问题选编/剑指offer/README.md index 018bd96..7fd4765 100644 --- a/算法问题选编/剑指offer/README.md +++ b/算法问题选编/剑指offer/README.md @@ -2,78 +2,78 @@ 《剑指offer》 这本书给出了50到面试题,涉及到字符串处理,堆栈,链表,二叉树等问题的处理。 >代码鲁榜性:边界条件,特殊输入,异常处理:空指针 ->分析方法:画图,举例,分解 +>分析方法:画图,举例,分解 >查找和排序是常考:重点掌握二分查找,快速排序,归并排序 -1 赋值运算符函数 -2 实现Singleton模式 +### 赋值运算符函数 +### 实现Singleton模式 -3 二维数组中的查找。二维数组中每一行从左到右递增,每一列从上到下递增 +### 二维数组中的查找。二维数组中每一行从左到右递增,每一列从上到下递增 -4 替换空格。如把字符串中的每个空格替换成`%20` +### 替换空格。如把字符串中的每个空格替换成`%20` `二遍扫描` -5 从尾到头打印链表 +### 从尾到头打印链表 `栈` -6 重建二叉树。输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树 +### 重建二叉树。输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树 -7 用两个栈实现队列 +### 用两个栈实现队列 -8 旋转数组的最小数字 +### 旋转数组的最小数字 -9 菲波那切数列 +### 菲波那切数列 -10 二进制中1的个数 +### 二进制中1的个数 `n=n&n-1` -11 数值的整数次方 +### 数值的整数次方 ``` double power(double base,int exponent) ``` -12 打印1到最大的n位数。 比如n=3,就打印1到999 +### 打印1到最大的n位数。 比如n=3,就打印1到999 -13 在O(1)时间删除链表节点,有一个头节点指针,还有一个指向改删除节点的指针 +### 在O(1)时间删除链表节点,有一个头节点指针,还有一个指向改删除节点的指针 `用下一个节点的内容覆盖当前删除节点的内容,删除下一个节点` -14 调整数组顺序使奇数位于偶数前面。调整后,所有奇数在前半部分,偶数在后半部分 +### 调整数组顺序使奇数位于偶数前面。调整后,所有奇数在前半部分,偶数在后半部分 `两边向中间扫描` -15 输出链表中倒数第K个节点 +### 输出链表中倒数第K个节点 `使用两个指针,一个先走k-1步` -16 反转链表 +### 反转链表 `三个指针` @@ -82,17 +82,17 @@ double power(double base,int exponent) 反转二叉树呢? -17 合并2个排序的链表,合并以后任然排序 +### 合并2个排序的链表,合并以后任然排序 `递归` -18 树的子结构,二叉树的基本操作 +### 树的子结构,二叉树的基本操作 -19 二叉树翻转 +### 二叉树翻转 ``` 8 8 @@ -107,12 +107,12 @@ double power(double base,int exponent) -20 从外向里顺时针打印矩阵 +### 从外向里顺时针打印矩阵 延伸:按大小顺序打印矩阵 -21 实现一个能找到栈的最小元素的函数 +### 实现一个能找到栈的最小元素的函数 `最小元素用辅助栈保存` @@ -120,16 +120,13 @@ double power(double base,int exponent) 22 栈的压入,弹出序列 -23 从上往下打印二叉树 +### 从上往下打印二叉树 `辅助队列` -24 二叉搜索树的后续遍历序列。输入一个整数数组,判断该数组是不是某二叉查找树的后续遍历序列的结果 +### 二叉搜索树的后续遍历序列。输入一个整数数组,判断该数组是不是某二叉查找树的后续遍历序列的结果。比如【 5,7,6,9,11,10,8】 是下面儿茶查找树的后续遍历结果: -`寻找规律` - -【 5,7,6,9,11,10,8】 是下面儿茶查找树的后续遍历结果: ``` 8 / \ @@ -139,9 +136,10 @@ double power(double base,int exponent) 5 7 9 11 ``` +`寻找规律` -25 二叉树中和为某一值的路径 +### 二叉树中和为某一值的路径 ``` 10 @@ -157,24 +155,23 @@ double power(double base,int exponent) `递归,栈` - -26 复杂链表的复制 +### 复杂链表的复制 -27 二叉搜索树与双向链表。将二叉搜索树转换成一个排序的双向链表,只调整树中节点的指针指向 +### 二叉搜索树与双向链表。将二叉搜索树转换成一个排序的双向链表,只调整树中节点的指针指向 `递归` `分解问题` -28 字符串的排列。输入一个字符串,打印该字符串中字符的所有排列 +### 字符串的排列。输入一个字符串,打印该字符串中字符的所有排列 `递归,分解` -29 数组中出现次数超过一半的数字 +### 数组中出现次数超过一半的数字 ``` int moreThanHalfNum(int *nums ,int length) @@ -182,7 +179,7 @@ int moreThanHalfNum(int *nums ,int length) `遍历数组,下一个数字和之前保存的数字一样就+1,否则就-1` -30 最小的K个数 +### 最小的K个数 `快速排序` `最大堆` @@ -190,48 +187,47 @@ int moreThanHalfNum(int *nums ,int length) 最大的K个数呢? -31 连续子数组的最大和 +### 连续子数组的最大和 `分析规律` `动态规划` -32 从1到n整数中,1出现的次数。比如 12,从1到12这些整数中,包含1的数字有 1, 10,11,12 ,1出现了5次 +### 从1到n整数中,1出现的次数。比如 12,从1到12这些整数中,包含1的数字有 1, 10,11,12 ,1出现了5次 -33 把数组排成最小的数。输入一个正整数数组,把所有数字拼起来排出一个最小数 +### 把数组排成最小的数。输入一个正整数数组,把所有数字拼起来排出一个最小数 ``` int minNumber(int *nums, int length); ``` -34 丑数 +### 丑数 > 只包含因子 2,3,5的数叫做丑数 -35 第一个只出现一次的字符 +### 第一个只出现一次的字符 `哈希表:值为出现的次数` `二次扫描` -36 数组中的逆序对 -数组中的两个数字如果前面一个数字大于后面的数字,这两个数字组成一个逆序对 +### 数组中的逆序对。数组中的两个数字如果前面一个数字大于后面的数字,这两个数字组成一个逆序对 如:[7,5,6,4] 的逆序对:(7,5)(7,6)(7,4)(5,4)(6,4) `归并排序 O(nlogn),空间O(n)` -37 两个链表的第一个公共节点 +### 两个链表的第一个公共节点 `长的链表先走k步` -38 数字在排序数组中出现的次数。比如 {1,2,3,3,3,3,4,5}, 数字 3出现了4从 +### 数字在排序数组中出现的次数。比如 {1,2,3,3,3,3,4,5}, 数字 3出现了4从 `使用二分查找找第一个3,和最后一个3出现的位置` @@ -241,7 +237,7 @@ int appearCount(int *nums,int length); ``` -39 二叉树的深度 +### 二叉树的深度 `递归` @@ -250,7 +246,7 @@ int appearCount(int *nums,int length); int treeDepth(BTree *root); ``` -40 数组中只出现一次的数字。数组中除了2个数字之外,其他的数组都出现了2次,找出这两个数 +### 数组中只出现一次的数字。数组中除了2个数字之外,其他的数组都出现了2次,找出这两个数 `异或` `二进制` @@ -264,47 +260,47 @@ int treeDepth(BTree *root); -41 和为s的两个数字 VS 和为s的连续正数序列 +### 和为s的两个数字 VS 和为s的连续正数序列 有一个递增排序数组,和一个数字s,找出数组中的2个数,使得和等于s。输出任意一对即可 `两边向中间扫描` -42 反转单词顺序 VS 左旋转字符串 +### 反转单词顺序 VS 左旋转字符串 -1. 翻转句子中单词的顺序,但单词内字符不变。如 『I am a student』 -> 『student. a am I』 +a. 翻转句子中单词的顺序,但单词内字符不变。如 『I am a student』 -> 『student. a am I』 `先以单词为单位翻转,整个句子再次翻转` -2. 左旋转字符串是把字符串其那面的若干位转义到字符串的尾部。比如"abcedfsz"和数字2,结果是"cedfszab" +b. 左旋转字符串是把字符串其那面的若干位转义到字符串的尾部。比如"abcedfsz"和数字2,结果是"cedfszab" ``` char *left_rotate_string(char *s,int n) ``` -43 n个色子的点数。把n个色子丢地上,朝上一面的点数之和为s。输入n,打印可能的值出现的概率 +### n个色子的点数。把n个色子丢地上,朝上一面的点数之和为s。输入n,打印可能的值出现的概率 -44 扑克牌中的顺子。从扑克牌从随机抽5张牌,判断是不是顺子。A是1,J~K是11~13,大小王可以看出任意数字。 +### 扑克牌中的顺子。从扑克牌从随机抽5张牌,判断是不是顺子。A是1,J~K是11~13,大小王可以看出任意数字。 -45 圆圈中最后剩下的数字(约瑟夫问题)。0,1,...,n-1 这n个数字排成一个圆圈,从数字0开始从这个圆圈里面删除第m个数字,求出这个圆圈里最后剩下的数字。 +### 圆圈中最后剩下的数字(约瑟夫问题)。0,1,...,n-1 这n个数字排成一个圆圈,从数字0开始从这个圆圈里面删除第m个数字,求出这个圆圈里最后剩下的数字。 -46 求 1+2+...+n。要求不用乘除法,for/while/if/else/switch等关键字及条件判断语句 +### 求 1+2+...+n。要求不用乘除法,for/while/if/else/switch等关键字及条件判断语句 -47 不用加减乘除做加法 +### 不用加减乘除做加法 `位运算` -48 不能被继承的类 +### 不能被继承的类 -49 把字符串转换成整数。比如 "12343567754" -> 12343567754 +### 把字符串转换成整数。比如 "12343567754" -> 12343567754 ``` int strToInt(char str); @@ -313,7 +309,7 @@ int strToInt(char str); `NULL,空串,正负号,溢出` -50 树中2个结点的最低公共祖先 +### 树中2个结点的最低公共祖先 如果这个树是二叉排序树 如果不是二叉排序树,但是有父节点指针