力扣LeetCode **数据结构**
217. 存在重复元素
- 题目
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 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
来源:力扣(LeetCode)
- 题解【C语言】
默认的代码模板
bool containsDuplicate(int* nums, int numsSize){
}
- **
暴力解法**
bool containsDuplicate(int* nums, int numsSize){
for (int i = 0; i < numsSize - 1; i++){
for (int j = i + 1; j < numsSize; j++){
if (*(nums+i) == *(nums+j)){
return true;
}
}
}
return false;
}
运行结果:超出时间限制
原因:双重循环的时间复杂度为O(n2),超出了本题对于运行时间的的要求,如果对于运行时间没有特殊要求可以采用
- 调用库函数qsort()
bool containsDuplicate(int* nums, int numsSize){
int compare(const void *a,const void *b){
return *(int*)a - *(int*)b;
}
qsort(nums,numsSize,sizeof(int),compare);
for (int i = 0; i < numsSize-1; i++){
if (*(nums+i) == *(nums+i+1))
return true;
}
return false;
}
运行结果:通过
说明
qsort()函数:
- 描述:
C 库函数void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
对数组进行排序。
- 声明:
下面是 qsort() 函数的声明
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
-
参数
- base – 指向要排序的数组的第一个元素的指针。
- nitems – 由 base 指向的数组中元素的个数。
- size – 数组中每个元素的大小,以字节为单位。
- compar – 用来比较两个元素的函数。
-
返回值
该函数不返回任何值。
-
示例
//一维数组从小到大排序
#include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b){
return *(int*)a-*(int*)b;
}
int main(){
int i=0;
int *array;
int n;
scanf("%d",&n);
array=(int*)malloc(n*sizeof(int));
for(;i<n;i++){
scanf("%d",(array+i));
}
qsort(array,n,sizeof(int),comp);
for(i=0;i<n;i++){
printf("%d\t",array[i]);
}
return 0;
}
- 参考文档:qsort_百度百科