update format

This commit is contained in:
nonstriater
2015-11-28 12:31:42 +08:00
parent 8c046ff95f
commit ddba7a0467
+45 -39
View File
@@ -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,空串,正负号,溢出`