c语言实现:
struct hash_table {
int key;
int value; // value 用不到
/* makes this structure hashable */
UT_hash_handle hh;
};
// 必须要初始化为NULL,考虑到leetcode c语言实现执行多个用例时全局变量和静态变量只会初始化一次,
// 所以我们就不在这里初始化值,而是放到main()中,
// 防止以后从这里copy代码到leetcode中时用例不通过
static struct hash_table *head_table;
static void uthash_add(struct hash_table *add)
{// 这里的key不是变量,而是结构体成员名
HASH_ADD_INT(head_table, key, add);
}
static struct hash_table *uthash_find(int key)
{struct hash_table *out;
// 这里的key是变量
HASH_FIND_INT(head_table, &key, out); return out;
}
static void uthash_delete(struct hash_table *del)
{
HASH_DEL(head_table, del);
}
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {
head_table = NULL;struct hash_table *tmp;
struct hash_table *curr, *next;
for (int i = 0; i < numsSize; i++) {
if (i > k) {
// 窗口大小为k,移除掉一个元素
1]);
tmp = uthash_find(nums[i - k - if (tmp)
uthash_delete(tmp);
}
tmp = uthash_find(nums[i]);if (tmp)
return true;
sizeof(struct hash_table));
tmp = malloc(
tmp->key = nums[i];// tmp->value 用不到
uthash_add(tmp);
}
HASH_ITER(hh, head_table, curr, next) {
uthash_delete(curr);
free(curr);
}return false;
}