文章目录
- 一、存在重复数组
- 1,1.题目展示
- 1.2.解题思路
- 1.3.参考代码
- 二、存在重复元素||
- 2.1.题目展示
- 2.2.解题思路
- 2.3.参考代码
大家学习完了数组,指针等内容可以进行刷题了,刷题不仅可以增加大家的代码量,也可以积累自己的经验,言归正传,下面我们讲解这两道题。
存在重复数组
存在重复数组||
一、存在重复数组
1,1.题目展示
1.2.解题思路
方法颇多,仅供参考:
大家看到这道题,可能会觉得比较简单,意思就是一个数组如果有个数字出现的次数超过了2次,甚至更多,那便是True;如果所有的数字只出现了一次,那么就是False。
那么先排序,然后判断这个数字跟自己后一个数字是否一样,如果是则返回True,如果遍历了一遍,没有的话,返回False。
1.3.参考代码
我使用的排序是C语言stdlib.h库中自带的qsort函数,其底层逻辑是快速排序,如果想了解qsort函数,大家可以看指针–五,或者查询官方文件cpluscplus官方文件https://legacy.cplusplus.com/reference/clibrary/
int cmp(int* a,const int* b)
{return *a-*b;
}bool containsDuplicate(int* nums, int numsSize) {qsort(nums,numsSize,sizeof(int),cmp);for(int i=0;i<numsSize-1;i++){if(nums[i]==nums[i+1])return true;}return false;
}
二、存在重复元素||
2.1.题目展示
2.2.解题思路
这个题看完,也会觉得思路不难,只是比上一道题难点。
满足要求:两个值一样,并且这个数所在的数组下标的差值需要小于K(指定的值)。
那么首先还是老套路,进行排序,然后,在这个题中数组的下标和值使用结构体,进行分开,然后在列出是否满足要求,满足则返回True,不满足返回False。
2.3.参考代码
typedef struct
{int val;int index;
}Lax;
int cmp(const void*a,const void*b)
{return (*(Lax*)a).val-(*(Lax*)b).val;
}
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {if(numsSize<=1)return false;Lax arr[numsSize];int i=0;for(i=0;i<numsSize;i++){arr[i].val=nums[i];arr[i].index=i;}qsort(arr,numsSize,sizeof(Lax),cmp);for(i=1;i<numsSize;i++){if(arr[i].val==arr[i-1].val)if(abs(arr[i].index-arr[i-1].index)<=k)return true;}return false;
}
这个代码所说运行效率不高,但是代码的可读性挺高的,适合初学者
完