add OJ
This commit is contained in:
@@ -198,10 +198,11 @@ http://www.cs.usfca.edu/~galles/visualization/Algorithms.html
|
||||
###编程网站
|
||||
|
||||
http://leetcode.com/
|
||||
http://oj.leetcode.com/
|
||||
http://openjudge.cn/ POJ。这有个POJ上的ACM训练方案 http://www.java3z.com/cwbwebhome/article/article19/res041.html
|
||||
http://openjudge.cn/ 开放在线程序评测平台,可以床架自己的OJ小组
|
||||
http://ac.jobdu.com/index.php 九度OJ
|
||||
|
||||
这有个ACM训练方案 http://www.java3z.com/cwbwebhome/article/article19/res041.html
|
||||
|
||||
|
||||
## 补充:C语言代码规范
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
题目来自[leetcode](https://leetcode.com/)
|
||||
|
||||
|
||||
#### Minimum Height Trees
|
||||
|
||||
|
||||
|
||||
#### Additive Number
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
题目来自 [九度OJ](http://ac.jobdu.com/index.php)
|
||||
|
||||
|
||||
|
||||
+55
-42
@@ -292,30 +292,6 @@ int atoi(const char *str){
|
||||
详细过程也可以[参考这里](http://blog.csdn.net/v_july_v/article/details/9024123)
|
||||
|
||||
|
||||
#### 匹配兄弟字符串
|
||||
|
||||
如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)。
|
||||
|
||||
思路:判断各自素数乘积是否相等。更多方法请参见:http://blog.csdn.net/v_JULY_v/article/details/6347454。
|
||||
|
||||
```
|
||||
int isBrother(const char *first,const char *secd)
|
||||
```
|
||||
|
||||
思路一: 循环匹配 指数级复杂度
|
||||
思路二: 利用质数,平方和比较,但这样必须是2个串的长度要一样,需要的空间比较大,最多256个字节。
|
||||
|
||||
|
||||
|
||||
示例代码:
|
||||
|
||||
```
|
||||
int isBrother(const char *first,const char *secd){
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### 删除串中指定的字符
|
||||
|
||||
删除指定的字符以后,后面的字符都要向前移动一位。这种复杂度是O(N^2);那么有没有O(N)的方法呢?
|
||||
@@ -361,15 +337,22 @@ char *delete_occurence_characterset(char *source,const char *del);
|
||||
|
||||
题目描述:“abeeeeegaaaffa" 压缩为 "abe5ag3f2a",请编程实现。
|
||||
|
||||
这道题需要注意:
|
||||
1. 单个字符不压缩
|
||||
2. 注意考虑压缩后某个字符个数是多位数(超过10个)
|
||||
3. 原地压缩最麻烦的地方就是数据移动
|
||||
|
||||
|
||||
这是使用2个指针,一前一后,如果不相等,都往前移动一位;如果相等,后一位变为数字2,且移动后面的指针一位,任然相等则数字加1,不相等
|
||||
|
||||
|
||||
```
|
||||
char *compress(const char *src,char *dest){
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
上面的压缩算法可以看到,压缩算法的效率验证依赖给定字符串的特性,如果'aaaaaaaa....aaa' 这样特征的字符串,使用上面的压缩算法,压缩率接近100%,相反,可能会的0%的压缩率。
|
||||
上面的压缩算法可以看到,压缩算法的`效率`验证依赖`给定字符串的特性`,如果'aaaaaaaa....aaa' 这样特征的字符串,使用上面的压缩算法,压缩率接近100%,相反,可能会的0%的压缩率。
|
||||
|
||||
|
||||
|
||||
@@ -378,13 +361,9 @@ char *compress(const char *src,char *dest){
|
||||
如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。
|
||||
(下面的算法只需要一次遍历,不需要开辟新空间,时间复杂度为O(N))
|
||||
|
||||
|
||||
|
||||
|
||||
#### 字符串匹配实现
|
||||
|
||||
请以俩种方法,回溯与不回溯算法实现。
|
||||
|
||||
```
|
||||
void trim_number(char *source);
|
||||
```
|
||||
|
||||
|
||||
#### 对称子字符串的最大长度
|
||||
@@ -398,12 +377,16 @@ int max_symmetrical_char_length(const char *scr);
|
||||
```
|
||||
|
||||
思路一:蛮力法,3重循环(类似 求子数组的最大和 fmax(i,j)问题), fmax(i,j)区间i,j是最长的对称字符
|
||||
|
||||
思路二: 遍历所有子串,然后判读是否对称 O(n^2)
|
||||
|
||||
思路二:遍历所有子串,然后判读是否对称 O(n^2)
|
||||
思路三:有个O(n)复杂度的 http://www.jb51.net/article/48090.htm
|
||||
|
||||
|
||||
```
|
||||
int max_symmetrical_char_length(const char *scr){
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### 字符串中找出连续最长的数字串
|
||||
|
||||
@@ -413,14 +396,13 @@ int max_symmetrical_char_length(const char *scr);
|
||||
|
||||
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789
|
||||
|
||||
它的原形是
|
||||
它的原形是:
|
||||
|
||||
```
|
||||
int continumax(char *outputstr,char *intputstr)
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 子串匹配的个数
|
||||
|
||||
已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde的个数,如果没有返回0,有的话返回子字符串的个数。
|
||||
@@ -433,7 +415,7 @@ char *sub_str_count(const char *src, const char *substr, int *count)
|
||||
|
||||
#### 求最大连续递增数字串
|
||||
|
||||
(如“ads3sl456789DF3456ld345AA”中的“456789”)
|
||||
如“ads3sl456789DF3456ld345AA”中的“456789”就是所求。
|
||||
|
||||
```
|
||||
int continuousnum(const char *input, char *output)
|
||||
@@ -448,14 +430,45 @@ int continuousnum(const char *input, char *output)
|
||||
|
||||
例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串。
|
||||
|
||||
如"abccade","dgcadde"的最大子串为"cad"
|
||||
|
||||
分析:求最长公共子串(Longest Common Subsequence, LCS)是一道非常经典的动态规划题,因此一些重视算法的公司像MicroStrategy都把它当作面试题。
|
||||
|
||||
```
|
||||
int longest_common_subsequence(const char *s1,const char *s2, char *common)
|
||||
```
|
||||
|
||||
分析:求最长公共子串(Longest Common Subsequence,LCS)是一道非常经典的动态规划题,因此一些重视算法的公司像MicroStrategy都把它当作面试题。如"abccade","dgcadde"的最大子串为"cad"
|
||||
|
||||
|
||||
实例代码:
|
||||
|
||||
```
|
||||
int longest_common_subsequence(const char *s1,const char *s2, char *common){
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### 匹配兄弟字符串
|
||||
|
||||
如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)。
|
||||
|
||||
思路:判断各自素数乘积是否相等。更多方法请参见:http://blog.csdn.net/v_JULY_v/article/details/6347454。
|
||||
|
||||
```
|
||||
int isBrother(const char *first,const char *secd)
|
||||
```
|
||||
|
||||
思路一: 循环匹配 指数级复杂度
|
||||
思路二: 利用质数,平方和比较,但这样必须是2个串的长度要一样,需要的空间比较大,最多256个字节。
|
||||
|
||||
|
||||
|
||||
示例代码:
|
||||
|
||||
```
|
||||
int isBrother(const char *first,const char *secd){
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 字符串的排列
|
||||
|
||||
Reference in New Issue
Block a user