先给例题:
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:
输入:nums = [1,2,3,4]
输出:false
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
要求:只写bool函数部分
思路:
寻求一样的数,只要排序就可以了,排序之后的数组相同的数一定是挨在一起的,这样只要排序后遍历到相同的就可以返回1,而且原题目中并没有保持数组不变的隐性要求,所有可以考虑用qsort法或者sort法的方法,由于无法编辑头文件,所有sort法无法使用。
解法一——qort法:
bool containsDuplicate(int* nums, int numsSize){
int i;
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
qsort(nums,numsSize,sizeof(int),comp);
for(i=0;i<numsSize-1;i++)
{
if(nums[i]==nums[i+1])
{
return 1;
}
}
return 0;
}
关键是其中的qsort的前置comp函数,从a到b就是从小到大,反之亦然
我们提取其中的qsort关键部分:
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
qsort(array,n,sizeof(int),comp);