5.8
看起来很简单的哈希函数算法,结果不是越界就是超时。
就一直傻乎乎的按照公式来算。没有想到可以累计去乘。
最后的代码实现虽然是很简单的,但是自己第一时间并没有想到。
还是要多看看,还是要继续学习。
class Solution {
/**
* @param key: A String you should hash
* @param HASH_SIZE: An integer
* @return an integer
*/
/*这是一种超时的写法。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
public int hashCode(char[] key,int HASH_SIZE) {
// write your code here
int length = key.length;
long sum = 0;
for(int i = 0;i<length;i++){
// tmp 用来计算pow(33,length-i-1)的值
long tmp = 1;
for(int j = 1;j<=length - i - 1;j++){
tmp = (tmp*33)%HASH_SIZE;
}
long tmp2 = ((long)key[i] * tmp)%HASH_SIZE;
sum = (sum + tmp2)%HASH_SIZE;
}
// System.out.println("sum:" + sum);
long res = sum%HASH_SIZE;
return (int)res;
}*/
public int hashCode(char[] key,int HASH_SIZE) {
// write your code here
int length = key.length;
long sum = (long)key[0];
for(int i = 1;i<length;i++){
// tmp 用来计算pow(33,length-i-1)的值
sum = (sum*33)%HASH_SIZE + (int)key[i];
}
long res = sum%HASH_SIZE;
return (int)res;
}
};