剑指offer:数组中重复的数字
class Solution {
public:
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]])
{
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
else
{
*duplication = numbers[i];
return true;
}
}
}
return false;
}
};
class Solution {
public:
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]])
{
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
else
{
*duplication = numbers[i];
return true;
}
}
}
return false;
}
};
2020-04-22
在牛客打卡13天,今天学习:刷题 2 道/代码提交 2 次
全部评论
相关推荐