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;
}
|