69,396
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
static const int array[] = { 100, 100, 20, 20, 11, 11, 44, 44, 55, 55, 99, 23, 23, 45, 45, 67, 67 };
static const int find_single(const int *src, const int *dest)
{
if (*src != *dest)
return *src;
if (*src == *dest)
return find_single(src + 2, dest + 2);
return -1;
}
int main(void)
{
int ret;
ret = find_single(array, array + 1);
if (ret != -1)
printf("ret: %d\n", ret);
else
;
return 0;
}
int find(int array[], uint length) {
if (length <= 1)
return 0;
uint begin = (length >> 1) & ~1;
uint end = begin;
while (1) {
if (++end >= length)
return find(array, begin - 1);
if (array[begin] == array[end]) {
if (begin == 0) {
++end;
return end + find(array + end, length - end);
}
--begin;
if (array[begin] != array[end]) {
if (begin & 1) {
++end;
return end + find(array + end, length - end);
} else {
return find(array, begin + 1);
}
}
} else {
if (begin & 1)
return end + find(array + end, length - end);
else
return find(array, begin + 1);
}
}
}
void do_find_the_one_diff(int in_data[], size_t len, size_t index)
{
if (0 == index)
{
cout << "find the only diff: " << in_data[index] << endl;
return;
}
if (in_data[index - 1] != in_data[index])
{
len -= index;
in_data += index;
}
else
len = index - 1;
index = len >> 1;
if (index & 1)
++index;
do_find_the_one_diff(in_data, len, index);
}
void find_the_one_diff(int in_data[], size_t len)
{
if (len & 1)
{
size_t index = len >> 1;
if (index & 1)
++index;
do_find_the_one_diff(in_data, len, index);
}
}
int main()
{
int in_data[] = {1, 1, 3, 3, 2, 4, 4, };
size_t len = sizeof in_data / sizeof(int);
find_the_one_diff(in_data, len);
return 0;
}