C语言 | Leetcode C语言题解之第219题存在重复元素II

题目:

题解:

cpp 复制代码
struct HashEntry {
    int key;                  
    int val;
    UT_hash_handle hh;         
};

void hashAddItem(struct HashEntry **obj, int key, int val) {
    struct HashEntry *pEntry;
    pEntry = malloc(sizeof(struct HashEntry));
    pEntry->key = key;
    pEntry->val = val;
    HASH_ADD_INT(*obj, key, pEntry);
} 

struct HashEntry *hashFindItem(const struct HashEntry **obj, int key)
{
    struct HashEntry *pEntry = NULL;
    HASH_FIND_INT(*obj, &key, pEntry);
    return pEntry;
}

void hashEraseItem(struct HashEntry **obj, int key)
{   
    struct HashEntry *pEntry = NULL;
    HASH_FIND_INT(*obj, &key, pEntry);
    if (NULL != pEntry) {
        HASH_DEL(*obj, pEntry);
        free(pEntry);
    } 
}

void hashFreeAll(struct HashEntry **obj)
{
    struct HashEntry *curr, *next;
    HASH_ITER(hh, *obj, curr, next)
    {
        HASH_DEL(*obj,curr);  
        free(curr);      
    }
}

bool containsNearbyDuplicate(int* nums, int numsSize, int k){
    struct HashEntry *cnt = NULL;
    for (int i = 0; i < numsSize; i++) {
        if (i > k) {
            hashEraseItem(&cnt, nums[i - k - 1]);
        }
        struct HashEntry * pEntry = hashFindItem(&cnt, nums[i]);
        if (NULL != pEntry) {
            return true;
        }
        hashAddItem(&cnt, nums[i], 1);
    }
    hashFreeAll(&cnt);
    return false;
}
相关推荐
阳洞洞4 小时前
79. Word Search
leetcode·回溯
梁下轻语的秋缘9 小时前
每日c/c++题 备战蓝桥杯(P1204 [USACO1.2] 挤牛奶 Milking Cows)
c语言·c++·蓝桥杯
零K沁雪10 小时前
Linux C 优雅的执行命令
linux·c语言
Espresso Macchiato13 小时前
Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix
leetcode·leetcode medium·leetcode周赛452·leetcode 3567
我是一只鱼022313 小时前
LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++
c++·算法·leetcode·矩阵·二分算法
GalaxyPokemon14 小时前
LeetCode - 100. 相同的树
算法·leetcode·职场和发展
爱吃涮毛肚的肥肥(暂时吃不了版)15 小时前
力扣——哈希——1.两数之和
算法·leetcode·职场和发展
tiandyoin15 小时前
统计C盘各种扩展名文件大小总和及数量的PowerShell脚本
java·c语言·spring
序属秋秋秋19 小时前
《C++初阶之入门基础》【C++的前世今生】
c语言·开发语言·c++·笔记·学习·程序人生