剑指offer
面试题3-|| 不修改数组查找数组中的重复数字
int getDuplication(const int* numbers, int length)
{
if (numbers == nullptr || length < 0) return false;
for (int i = 0; i < length; i++) {
if (numbers[i] < 1 || numbers[i] > length - 1) return false;
}
int start = 1, end = length - 1;
int middle;
while (start <= end) {
middle = ((end - start) >> 1) + start;
count = countRange(numbers, length, start, middle);
if (start == end)
{
if (count > 1)
return start;
else
break;
}
if (count > (middle - start + 1))
{
end = middle;
}
else
{
start = middle + 1;
}
}
return -1;
}
int countRange(const int* numbers, int length, int start, int end)
{
if (numbers == nullptr)
return 0;
int count = 0;
for (int i = 0; i < length; i++)
{
if (numbers[i] >= start && numbers[i] <= end)
{
count++;
}
}
return count;
}