原创博文,转载请注明出处!
# 题目
# 思路:
对数组排序,在排序过程中找出任意一个重复的数字。排序的原则是保证数组下标i和数字i相对应,当有多个数字对应数组下标i时,则找到重复数字。举例:
数组2310253,下标0对应的数字是2,数字2与下标0不一致,交换下标0和下标2对应的数字,交换后的结果为1320253; 数组1320253,下标0对应的数字是1,数字1与下标0不一致,交换下标0和下标1对应的数字,交换后的结果为3120253;数组3120253,下标0对应的数字是3,数字3与下标0不一致,交换下标0和下标3对应的数字,0123253。数组0123253,下标4对应的数字是2,下标2对应的数字也是2,下标4对应的数字是重复数字。
# 代码
#include <iostream> using namespace std; class Solution { public: /* 函数参数: numbers数组 length数组长度 duplication重复数字 函数返回值: bool类型,true表示存在重复数字,false表示不存在重复数字 */ bool duplicate(int numbers[], int length, int* duplication) { /* 特殊输入检查 */ // 空数组/长度小于0 if(numbers == nullptr || length <= 0) return false; // 数组元素不符合题干 for(int i=0; i<length;++i) { if(numbers[i]<0 || numbers[i]>length-1) return false; } /* 找出任意一个重复元素*/ for(int i=0;i<length;i++) { while(numbers[i]!=i) { // 查找重复元素 if(numbers[i] == numbers[numbers[i]]) { *duplication = numbers[i]; return true; } else { int temp = numbers[i]; numbers[i] = numbers[temp]; numbers[temp] = temp; } } } return false; } }; int main() { /* 参数列表 */ int numbers[7] = {3,1,2,0,0,5,3}; int length = 7; int *duplication; /* 类 */ Solution solution; cout<<solution.duplicate(numbers,length,duplication)<<endl; cout<<*duplication<<endl; return 0; }