给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
实现
推荐实现方式:1.哈希表 2.排序后比较相邻元素 3.暴力迭代方式不推荐
#include<stdio.h>
#include<stdlib.h>
//推荐实现方式:1.哈希表 2.排序后比较相邻元素
int containsDuplicate(int* nums, int numsSize);
int compare(void *a, void *b);
int main(){
int array[]={1,2,3,1};
printf("%d",containsDuplicate(array,sizeof(array)/sizeof(int)));
return 0;
}
//排序后比较方式
int containsDuplicate(int* nums, int numsSize){
int i;
//stdlib.h头文件中的函数
//数组 - 大小 - 元素大小 - 函数
qsort(nums,numsSize,sizeof(int),compare);
for(i=1;i<numsSize;i++){
if(nums[i]==nums[i-1]){
return 1;
}
}
return 0;
}
int compare(void *a, void *b){
return *((int *)(a))-*((int *)(b));
}
//暴力方式:时间复杂度太高 O(n^2) - 不通过
//int containsDuplicate(int* nums, int numsSize){
// int x, y,temp;
// //最后一个没有必要比了,就剩它自己了
// for(x=0;x<numsSize-1;x++){
// temp = nums[x];
// //或者 temp = *(nums+x);
// //x之前的已经比完了,肯定不重复
// for(y=x+1;y<numsSize;y++){
// if(nums[y]==temp){
// return 1;
// }
// }
// }
// return 0;
//}
输出
1
Q.E.D.