代码:
#include<iostream>
int countRange(const int* P_array, int len, int start, int end)
{
int count = 0;
for(int i = 0; i < len-1; ++i)
{
if(P_array[i] <= end && P_array[i] >= start)
{
++count;
}
}
return count;
}
int getDuplication(const int* P_array, int len)
{
if(P_array == nullptr || len < 1)
{
return -1;
}
int start = 1;
int end = len - 1;
while(start <= end)
{
if(start == end)
{
if(countRange(P_array, len, start, start) > 1)
{
return start;
}
else
{
return -1;
}
}
int middle = ((end - start)>>1) + start;
if((middle - start + 1) < countRange(P_array, len, start, middle))
{
end = middle;
}
else
{
start = middle + 1;
}
}
return -1;
}
int main()
{
int number[8] = {2,1,5,4,3,2,6,7};
int result = getDuplication(number, 8);
if(result)
{
std::cout << result << std::endl;
}
return 0;
}