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
//比较函数
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
//结果体,必须包含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;
}