检测一组值中的更改

时间:2015-11-11 13:15:28

标签: c

我有一个项目,程序需要多个整数值并检测这些值之间的变化。只接受一个与其他人不同的价值,只有一次。当识别出错误时,例如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个甚至更多的情况。有什么想法吗?

1 个答案:

答案 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次,所以序列是有效的。