我有一个项目,程序需要多个整数值并检测这些值之间的变化。只接受一个与其他人不同的价值,只有一次。当识别出错误时,例如10 12 13 ...,程序需要立即停止,而不是获取其他值。
e.g: 10 10 10 10 10 18 10 10 10
这是一个可接受的数据条目,因为18只使用了一次,并且是唯一不同的值。
e.g: 10 10 14 17 10 10 10 10
这不是可接受的数据条目,因为使用了3个不同的值。
e.g: 10 10 10 10 12 12 12 12 12
这也不是一个可接受的数据条目,因为10和12多次使用。
我无法为此创建一个算法,涵盖这3个甚至更多的情况。有什么想法吗?
答案 0 :(得分:0)
我能想出的最简单的算法是计算你看到两个不同值的次数。假设input
是一个大小为input_size
的数组,当序列变化太大时此函数返回0
,如果检测到一个或零个更改,则返回1
:
int isvalidsequence(const int *input, int input_size)
{
int item1, item2;
int seen1 = 0, seen2 = 0;
for (int i = 0; i < input_size; ++i)
{
int item = input[i];
if (seen1 == 0)
{
item1 = item;
++seen1;
}
else if (item == item1)
{
++seen1;
}
else if (seen2 == 0)
{
item2 = item;
++seen2;
}
else if (item == item2)
{
++seen2;
}
else
{
return 0;
}
/* Exit loop early if we've already seen both characters more than once */
if (seen1 > 1 && seen2 > 1)
return 0;
}
return 1;
}
它存储它看到的第一个不同的项目和它看到的第二个不同的项目,然后开始计算它看到的每个项目的次数。如果它然后找到第三个不同的项目,则序列变化太多。如果它发现第一个和第二个不同的项目都被多次看到,那么序列也发生了太大的变化。另外,这两个项目中至少有一个被看过0或1次,所以序列是有效的。