给你一个整数数组 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.


仰望星空,还需脚踏实地。