题目:
给定一个整数数组,判断是否存在重复元素。
如果任意一值在数组中出现至少两次,函数返回 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 comp(const void *a, const void *b)
{
return *(int *)a - *(int *)b; //递增排序
}
bool containsDuplicate(int* nums, int numsSize){
int i;
int flag = 0;
qsort(nums, numsSize, sizeof(int), comp);
for(i = 0; i < numsSize - 1; i++)
{
if(nums[i] == nums[i + 1])
{
flag = 1;
break;
}
}
if(flag == 1)
return true;
else
return false;
}
总结:
- 不能简单的使用哈希映射(将数组元素映射到数组的对应位置), 因为数组元素可能存在负数,这时会出错。例:[1,5,-2,-4,0];
2.直接将每个元素和数组中其他元素进行比较是否相等,会超出时间限制。
补充:C中快速排序函数qsort():
qsort(buf, n, sizeof(int), cmp)
:
- 第一个参数buf为待排序数组首地址;
2.第二个参数n为数组长度;
- 第三个参数sizeof(int)为数组元素所占字节;
4.第四个参数cmp为所调用函数的指针,函数名即是函数的指针,调用函数来确定排序的方式。
各种数据类型的升序排序函数
参考:https://blog.csdn.net/z944733142/article/details/80292613