From ddba7a04673cc5a22d49edff1887e2cd7b4101f5 Mon Sep 17 00:00:00 2001 From: nonstriater <410495266@qq.com> Date: Sat, 28 Nov 2015 12:31:42 +0800 Subject: [PATCH] update format --- 算法问题选编/剑指offer/README.md | 84 +++++++++++++++++--------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/算法问题选编/剑指offer/README.md b/算法问题选编/剑指offer/README.md index 6d2cbf9..018bd96 100644 --- a/算法问题选编/剑指offer/README.md +++ b/算法问题选编/剑指offer/README.md @@ -1,13 +1,12 @@ 《剑指offer》 这本书给出了50到面试题,涉及到字符串处理,堆栈,链表,二叉树等问题的处理。 -代码鲁榜性:边界条件,特殊输入,异常处理:空指针 -分析方法:画图,举例,分解 - -查找和排序是常考:重点掌握二分查找,快速排序,归并排序 +>代码鲁榜性:边界条件,特殊输入,异常处理:空指针 +>分析方法:画图,举例,分解 +>查找和排序是常考:重点掌握二分查找,快速排序,归并排序 -1 赋值运算符函数 +1 赋值运算符函数 2 实现Singleton模式 @@ -15,12 +14,12 @@ -4 替换空格。把字符串中的每个空格替换成 %20 +4 替换空格。如把字符串中的每个空格替换成`%20` `二遍扫描` -5 从尾到头打印链表 +5 从尾到头打印链表 `栈` @@ -40,14 +39,16 @@ 9 菲波那切数列 -10 二进制中1的个数 +10 二进制中1的个数 `n=n&n-1` -11 数值的整数次方。实现 double power(double base,int exponent) - +11 数值的整数次方 +``` +double power(double base,int exponent) +``` 12 打印1到最大的n位数。 比如n=3,就打印1到999 @@ -55,29 +56,34 @@ -13 在O(1)时间删除链表节点,有一个头节点指针,还有一个指向改删除节点的指针 +13 在O(1)时间删除链表节点,有一个头节点指针,还有一个指向改删除节点的指针 + `用下一个节点的内容覆盖当前删除节点的内容,删除下一个节点` 14 调整数组顺序使奇数位于偶数前面。调整后,所有奇数在前半部分,偶数在后半部分 + `两边向中间扫描` 15 输出链表中倒数第K个节点 + `使用两个指针,一个先走k-1步` 16 反转链表 + `三个指针` -反转二叉树 +反转二叉树呢? 17 合并2个排序的链表,合并以后任然排序 + `递归` @@ -87,14 +93,16 @@ 19 二叉树翻转 + +``` 8 8 / \ / \ / \ / \ 6 10 翻转后 10 6 / \ / \ / \ / \ 5 7 9 11 11 9 7 5 +``` - `交换每个节点的左右子树` @@ -105,6 +113,7 @@ 延伸:按大小顺序打印矩阵 21 实现一个能找到栈的最小元素的函数 + `最小元素用辅助栈保存` @@ -112,34 +121,36 @@ 23 从上往下打印二叉树 + `辅助队列` -24 二叉搜索树的后续遍历序列。 -输入一个整数数组,判断该数组是不是某二叉查找树的后续遍历序列的结果 +24 二叉搜索树的后续遍历序列。输入一个整数数组,判断该数组是不是某二叉查找树的后续遍历序列的结果 `寻找规律` 【 5,7,6,9,11,10,8】 是下面儿茶查找树的后续遍历结果: - +``` 8 / \ / \ 6 10 / \ / \ 5 7 9 11 - +``` 25 二叉树中和为某一值的路径 +``` 10 / \ / \ 5 12 / \ 5 7 +``` 和为22的路径有2条:10--5--7, 10--12 @@ -159,6 +170,7 @@ 28 字符串的排列。输入一个字符串,打印该字符串中字符的所有排列 + `递归,分解` @@ -175,7 +187,7 @@ int moreThanHalfNum(int *nums ,int length) `快速排序` `最大堆` -最大的K个数 +最大的K个数呢? 31 连续子数组的最大和 @@ -183,14 +195,12 @@ int moreThanHalfNum(int *nums ,int length) `分析规律` `动态规划` -32 从1到n整数中,1出现的次数 -比如 12,从1到12这些整数中,包含1的数字有 1, 10,11,12 ,1出现了5次 - -`` +32 从1到n整数中,1出现的次数。比如 12,从1到12这些整数中,包含1的数字有 1, 10,11,12 ,1出现了5次 -33 把数组排成最小的数 -输入一个正整数数组,把所有数字拼起来排出一个最小数 + + +33 把数组排成最小的数。输入一个正整数数组,把所有数字拼起来排出一个最小数 ``` int minNumber(int *nums, int length); @@ -216,12 +226,13 @@ int minNumber(int *nums, int length); 37 两个链表的第一个公共节点 + `长的链表先走k步` -38 数字在排序数组中出现的次数 -比如 {1,2,3,3,3,3,4,5}, 数字 3出现了4从 +38 数字在排序数组中出现的次数。比如 {1,2,3,3,3,3,4,5}, 数字 3出现了4从 + `使用二分查找找第一个3,和最后一个3出现的位置` @@ -231,6 +242,7 @@ int appearCount(int *nums,int length); 39 二叉树的深度 + `递归` @@ -238,8 +250,7 @@ int appearCount(int *nums,int length); int treeDepth(BTree *root); ``` -40 数组中只出现一次的数字 -数组中除了2个数字之外,其他的数组都出现了2次,找出这两个数 +40 数组中只出现一次的数字。数组中除了2个数字之外,其他的数组都出现了2次,找出这两个数 `异或` `二进制` @@ -272,27 +283,21 @@ char *left_rotate_string(char *s,int n) ``` -43 n个色子的点数 - -把n个色子丢地上,朝上一面的点数之和为s。输入n,打印可能的值出现的概率 +43 n个色子的点数。把n个色子丢地上,朝上一面的点数之和为s。输入n,打印可能的值出现的概率 -44 扑克牌中的顺子 - -从扑克牌从随机抽5张牌,判断是不是顺子。A是1,J~K是11~13,大小王可以看出任意数字。 +44 扑克牌中的顺子。从扑克牌从随机抽5张牌,判断是不是顺子。A是1,J~K是11~13,大小王可以看出任意数字。 -45 圆圈中最后剩下的数字(约瑟夫问题) - -0,1,...,n-1 这n个数字排成一个圆圈,从数字0开始从这个圆圈里面删除第m个数字,求出这个圆圈里最后剩下的数字。 +45 圆圈中最后剩下的数字(约瑟夫问题)。0,1,...,n-1 这n个数字排成一个圆圈,从数字0开始从这个圆圈里面删除第m个数字,求出这个圆圈里最后剩下的数字。 46 求 1+2+...+n。要求不用乘除法,for/while/if/else/switch等关键字及条件判断语句 - 47 不用加减乘除做加法 + `位运算` @@ -301,9 +306,10 @@ char *left_rotate_string(char *s,int n) 49 把字符串转换成整数。比如 "12343567754" -> 12343567754 -`` +``` int strToInt(char str); ``` + `NULL,空串,正负号,溢出`