考研的时候学习过哈希函数,但这只是书本上的知识,简单的理解,从来没用过,也不知道怎么用,直到学了第一堂算法课,原来hash表可以用数组模拟,统计数字或字符出现的次数。
代码如下:
int CHash::getStuNum(int* data, int len, int score){
if(data == NULL || len <= 0 || score < 0 || score > MAX_SCORE){
return ERROR;
}
//count each score
int *scoreMap = new int[MAX_SCORE];
for(int i = 0; i < MAX_SCORE; i++){
scoreMap[i] = 0;
}
for(int i = 0; i < len; i ++){
scoreMap[data[i]] ++;//关键字映射到scoreMap中,关键字每出现一次,对应的的scoreMap[data[i]]加一;
}
int result = scoreMap[score];
delete[] scoreMap;
return result;
}
//统计字符出现的频率,本题是求第一个只出现一次的字符
char CHash::getFirstChar(char *str){
if(str == NULL){
return ' ';
}
const int CHAR_NUM = 256;
int *charMap = new int[CHAR_NUM]; //assic码0-255;
for(int i = 0; i < CHAR_NUM; i++){
charMap[i] = 0;
}
char *p = str;
while( *p != '\0'){
charMap[*p] ++; //字符隐式转换成整形;
p++;
}
p = str;
while( *p != '\0'){
if(charMap[*p] == 1){
return *p;
}
p++;
}
delete[] charMap;
return ' ';
}