跳转至

leetcode


使用C语言刷题时,没有现成的高级数据结构或者函数调用可用

leetcode常用变量

变量名 作用

leetcode可用C函数

函数 作用
abs(int a) 计算绝对值
gcd() 最大公约数
fmax(int a, int b) 求最大值
qsort(void base, size_t nitems, size_t size, int (compar)(const void , const void)) 对数组进行排序

qsort

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//比较函数
int compare(const void *a, const void *b)
{
    return *(int *)a - *(int *)b;
}

//排序函数
void sort(int *arr, int len)
{
    //调用qsort函数
    qsort(arr, len, sizeof(int), compare);
}

uthash

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//结果体,必须包含UT_hash_handle
typedef struct {
    int key;
    int val;
    UT_hash_handle hh;  //这个变量必须定义,名字可以改
} HashItem;

//检查是否存在重复元素
void check(int* arr, int arrSize) {

    HashItem *head = NULL;  //定义头节点,这个变量必须为空指针
                             //如果使用单独的函数创建,请使用二级指针

    for (int i = 0; i < arrSize; i++) {
        HashItem *node = NULL; //新定义一个节点的指针
        HASH_FIND_INT(head, &sortedArr[i], node); //查找是否存在重复元素
        if (node == NULL) {  //元素不存在
            node = (HashItem *)malloc(sizeof(HashItem)); //分配空间
            node->key = sortedArr[i];
            node->val = HASH_COUNT(head) + 1; //记录下是hash表里第几个元素
            HASH_ADD_INT(head, key, node); //key按int类型插入
        }
    }

    //释放流程
    HashItem *cur, *tmp;
    HASH_ITER(hh, head, cur, tmp) {
        HASH_DEL(head, cur);  
        free(cur);             
    }
    return;
}