【发布时间】:2021-01-28 11:25:44
【问题描述】:
我正在尝试解决这个需要实现线性探测的问题。
给定一个整数数组和一个哈希表大小。使用线性探测将数组元素填充到哈希表中以处理冲突。
示例 1:
Input:
hashSize = 10
sizeOfArray = 4
Array[] = {4,14,24,44}
Output:
-1 -1 -1 -1 4 14 24 44 -1 -1
示例 2:
Input:
hashSize = 10
sizeOfArray = 4
Array[] = {9,99,999,9999}
Output:
99 999 9999 -1 -1 -1 -1 -1 -1 9
你的任务:
您无需读取输入或打印任何内容。
你的任务是完成函数 linearProbing(),它以空哈希表 (hash)、哈希表大小 (hashSize)、整数数组 arr[] 及其大小 N 作为输入,并插入所有元素将数组 arr[] 放入给定的哈希表中。
哈希表的空单元格将被赋予 -1 的值。此外,如果没有更多空间可以插入新元素,只需删除该元素即可。
预期时间复杂度:O(N)。
预期辅助空间:O(1)。
约束:
1 <= hashSize <= 100
1 <= sizeOfArray <= 100
0 <= Array[] <= 105
我写的代码是:
static int[] linearProbing(int hash_size, int arr[], int N) {
int[] a = new int[hash_size];
for(int i = 0; i < hash_size; i++)
a[i] = -1;
for(int i = 0; i < N; i++) {
int probe = arr[i] % hash_size;
int offset = 1;
while(a[probe] != -1) {
probe = (probe + offset) % hash_size;
}
a[probe] = arr[i];
}
return a;
}
给定的测试用例正在运行。但是在提交时我得到了 TLE。请帮忙。
【问题讨论】:
-
虽然情况可能并非如此。当完整的哈希数组被填充时会发生什么。在这种情况下,您将不会有任何空位,while 循环将永远不会停止。
-
哦,我忘了。您能提出所需的更改建议吗?
-
链接无效。页面是内部 404
-
你能查一下这种情况会不会发生吗?你能有 hash_size
-
如前所述,会出现哈希表大小小于数组大小的情况。您的算法在现场,但没有处理这种情况并进入无限循环。 ` 另外,如果没有更多空间来插入新元素,只需删除该元素。`