update format

This commit is contained in:
nonstriater
2015-11-28 21:40:11 +08:00
parent 2957b950a4
commit 7ead818fce
4 changed files with 122 additions and 94 deletions
+25 -10
View File
@@ -6,18 +6,19 @@
计算机处理的数据除了数值,就是字符。字符处理的常见问题包括:
单词反转
回文判断
字符串的压缩
字符串的排列和组合
字符串比较
子串
* 单词反转
* 回文判断
* 字符串的压缩
* 字符串的排列和组合
* 字符串比较
* 子串
### 链表
链表处理的常见问题包括:
* 链表反转
* 链表中是否有环
* 删除链表中的p节点,在p节点前面插入节点q, 要求O(1)复杂度
@@ -25,7 +26,6 @@
* 2个链表合并
### 堆和栈
这是最基本数据结构,相对容易理解
@@ -34,21 +34,36 @@
### 数值问题
这部分都是一些数学几何计算方面的问题。
这部分都是一些数学几何计算方面的问题。 主要有:
* 位运算
* 随机数
* 大数问题
### 数组数列问题
这部分的问题都集中在数据集合上。主要有:
* 数组排序
* top-k
* 子数组
* 多个数组合并,交集
### 矩阵
这部分都是矩阵和二维数组相关的问题。
### 二叉树
* 遍历
* 翻转
* 子树
### 图
+5
View File
@@ -1,4 +1,9 @@
问题涉及有:
* 遍历
* 翻转
* 子树
#### 把二元查找树转变成排序的双向链表
+28
View File
@@ -1,4 +1,10 @@
这部分都是一些数学几何计算方面的问题。主要由:
* 位运算
* 随机数
* 大数问题
### 字符串转整数
@@ -146,6 +152,28 @@ int div(const int x, const int y)
#### 数值的整数次方
题目:实现函数double Power(double base, int exponent),求base的exponent次方。
不需要考虑溢出。
分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒写出如下的代码:
```
double Power(double base, int exponent)
{
double result = 1.0;
for(int i = 1; i <= exponent; ++i)
result *= base;
return result;
}
```
上面的代码没有考虑 exponent<0的情况。
#### 求根号2的值
+64 -84
View File
@@ -1,4 +1,11 @@
这部分的问题都集中在数据集合上。主要有:
* 数组排序
* top-k
* 子数组
* 多个数组合并,交集
#### 求子数组的最大和(最大字段和)
@@ -145,11 +152,6 @@ int findaddends(int *data,int length,int sum,int *a,int *b);
3. 有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N平均分布的,也就是说V[N]里面任意一个数都有1/N的机会被取出,要求空间复杂度为O(1)
#### 找数组里面重复的一个数
找数组里面重复的一个数,一个含n个元素的整数数组至少存在一个重复数,
@@ -320,30 +322,7 @@ isShunZi(int *a,int length)
#### 数值的整数次方
题目:实现函数double Power(double base, int exponent),求base的exponent次方。
不需要考虑溢出。
分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒写出如下的代码:
```
double Power(double base, int exponent)
{
double result = 1.0;
for(int i = 1; i <= exponent; ++i)
result *= base;
return result;
}
```
上面的代码没有考虑 exponent<0的情况。
####
#### 分割数组
一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。
能否只用一个额外数组和少量其它空间实现。
@@ -352,60 +331,6 @@ double Power(double base, int exponent)
////////////// 数列 ///////////////
输入a1,a2,...,an,b1,b2,...,bn,
在O(n)的时间,O(1)的空间将这个序列顺序改为a1,b1,a2,b2,a3,b3,...,an,bn,
且不需要移动,通过交换完成,只需一个交换空间。
例如,N=9时,第2步执行后,实际上中间位置的两边对称的4个元素基本配对,
只需交换中间的两个元素即可,如下表所示。颜色表示每次要交换的元素,左边向右交换,右边向左交换。
交换过程如下表所示
交换x1,x3;交换x2,x4;再交换中间的x1,x4;交换y1,y2。
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
初看此题,貌似很难,10分钟过去了,可能有的人,题目都还没看懂。
举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0在下排出现了6次,1在下排出现了2次,
2在下排出现了1次,3在下排出现了0次....
以此类推..
0xX0+1xX1+2xX2....+9xX9 = 10;
X0+X1+...+ = 10;
转换成多元一次方程求通解的问题。(Matlib)
一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值为3
给出两个集合A和B,其中集合A={name},
集合B={age、sex、scholarship、address、...},
要求:
问题1、根据集合A中的name查询出集合B中对应的属性信息;
问题2、根据集合B中的属性信息(单个属性,如age<20等),查询出集合A中对应的name。
#### 约瑟夫环问题
n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
@@ -572,7 +497,6 @@ int print_sequence_sum(int n)
第1500个: 1500/22=68余4,一个周期内的前4个数是2,3,4,5; 最终答案是`68*30+5`
#### 调整数组顺序使奇数位于偶数前面
@@ -584,6 +508,7 @@ int print_sequence_sum(int n)
```
void reorder(int *data, int length);
```
#### 在从1到n的正数中1出现的次数
@@ -674,5 +599,60 @@ f(n)= 1 n=1
#### 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值为3
////////////// 数列 ///////////////
输入a1,a2,...,an,b1,b2,...,bn,
在O(n)的时间,O(1)的空间将这个序列顺序改为a1,b1,a2,b2,a3,b3,...,an,bn,
且不需要移动,通过交换完成,只需一个交换空间。
例如,N=9时,第2步执行后,实际上中间位置的两边对称的4个元素基本配对,
只需交换中间的两个元素即可,如下表所示。颜色表示每次要交换的元素,左边向右交换,右边向左交换。
交换过程如下表所示
交换x1,x3;交换x2,x4;再交换中间的x1,x4;交换y1,y2。
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
初看此题,貌似很难,10分钟过去了,可能有的人,题目都还没看懂。
举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0在下排出现了6次,1在下排出现了2次,
2在下排出现了1次,3在下排出现了0次....
以此类推..
0xX0+1xX1+2xX2....+9xX9 = 10;
X0+X1+...+ = 10;
转换成多元一次方程求通解的问题。(Matlib)
给出两个集合A和B,其中集合A={name},
集合B={age、sex、scholarship、address、...},
要求:
问题1、根据集合A中的name查询出集合B中对应的属性信息;
问题2、根据集合B中的属性信息(单个属性,如age<20等),查询出集合A中对应的name。