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;
}
相关推荐
杰.sir1 小时前
【字符函数和字符串函数】
c语言
ArmeriaLeap1 小时前
AtCoder AT_abc405_d ABC405D - Escape Route
题解·atcoder
hh妙蛙种子2 小时前
牛客练习赛138
c++·经验分享·算法·leetcode·职场和发展·深度优先·图论
Swift社区2 小时前
LeetCode 270:在二叉搜索树中寻找最接近的值(Swift 实战解析)
算法·leetcode·swift
南玖yy2 小时前
内存安全暗战:从 CVE-2025-21298 看 C 语言防御体系的范式革命
c语言·开发语言·人工智能·struts·安全·架构·交互
大锦终4 小时前
【C++】红黑树
c语言·开发语言·数据结构·c++
似水এ᭄往昔4 小时前
【数据结构】——栈
c语言·数据结构
jz_ddk4 小时前
[学习]RTKLib详解:rtksvr.c与streamsvr.c
c语言·学习·github
一尘之中4 小时前
二进制与十六进制数据转换:原理、实现与应用
linux·c语言·人工智能
mmz12075 小时前
后缀表达式+栈(详解)(c++)
c语言·c++