我有一个项目,其中一个程序采用大量整数值并检测这些值之间的变化。只接受一种与其他值不同的值,而且只接受一次。当识别出错误时,例如 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 种甚至更多情况。有什么想法吗?
最佳答案
我能想到的最简单的算法是计算您看到两个不同值的次数。假设 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 次,因此序列有效。
关于c - 检测一组值的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651318/