本想更新一个哈希解法的,但是苦于还没看懂。所以就留个坑,后期回来填。
本期知识点:qsort() 排序函数
什么是qsort() 函数?
qsort 函数是C语言编译器函数库自带的排序函数。
qsort() 函数有什么?
函数原型:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))
- base – 指向要排序的数组的第一个元素的指针;
- nitems – base 指向的数组中元素的个数;
- size – 数组中每个元素的大小,以字节为单位;
- compar – 用来比较两个元素的函数,即函数指针(回调函数)
回调函数:
一个通过函数指针调用的函数,如果把这个函数的指针(函数地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就被称为回调函数。
简单来说,一间房子(函数)里面放着一把房间钥匙(函数指针),当我拿这把钥匙去开那个房间的时候,这个房间就被叫做回调房间(回调函数)
compar 参数:
compar 参数指向一个对比两个元素的函数。
- 注意两个形参必须是const void * 型;
- 同时传入的实参也必须转换成const void * 型;
- 在compar 函数内部会将const void * 型转换成实际类型。
compar原型:
int compar(const void *p1, const void *p2);
- 如果compar返回值小于0(< 0),那么p1所指向元素会被排在p2所指向元素的左面;
- 如果compar返回值等于0(= 0),那么p1所指向元素与p2所指向元素的顺序不确定;
- 如果compar返回值大于0(> 0),那么p1所指向元素会被排在p2所指向元素的右面。
说明
qsort() 函数不返回任何值
题目要求
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
题目解析
本题只是最简单的判断数组内是否有重复元素,且没有空间要求。
解题思路
- 通过排序,将数组内的所有元素变成有序数组;
- 而后我们不断对比前后两个元素;
- 当出现相同元素时,就判断为存在重复元素;
- 若循环完整个数组都没有退出时,判断为不存在重复元素。
排序法
int cmp(const void* _a, const void* _b) {
int a = *(int*)_a, b = *(int*)_b;
return a - b;
}
bool containsDuplicate(int* nums, int numsSize) {
qsort(nums, numsSize, sizeof(int), cmp); // 将数组进行排序
for (int i = 0; i < numsSize - 1; i++) { // 对比数组内是否有重复元素
if (nums[i] == nums[i + 1]) {
return true; // 若有相同元素则返回有
}
}
return false; // 否则返回无
}
以上就是本篇文章的全部内容了,如果觉得有帮助到你的,
麻烦点赞转发收藏!!!
我们下期再见!
在更新技术文章的同时,我还会更新我的学习方法到知乎上,如果大家感兴趣的可以去看一下。