【问题标题】:Find exception number into my arithmetic sequence在我的算术序列中查找异常号
【发布时间】:2021-04-09 23:40:54
【问题描述】:

我需要你的帮助。我正在尝试编写一个程序,该程序允许将异常号查找到算术序列中。 例如,我有一个具有以下值的 int 数组: 2、3、6、4、5 顺便说一下,输出必须是 6。 但我被那个阻止了。我不想使用很多条件等。

    public int FindException(int[] sequence)
    {
        int[] orderSequence = sequence.OrderBy(x => x).ToArray();
        int oldDifference = 0, sequenceDifference = 0;

        for (int i = 0; i < orderSequence.Length; i++)
        {
            sequenceDifference = orderSequence[i + 1] - orderSequence[i];

            if (i == 0)
                oldDifference = sequenceDifference;

            if (sequenceDifference != oldDifference)
                return i > 1 ? orderSequence[i + 1] : orderSequence[i - 1];

            oldDifference = sequenceDifference;
        }
        return 0;
    }

【问题讨论】:

  • 什么类型的'算术序列'是可能的。您可以为此定义规则吗?
  • A|i] - A[i-1] 必须是常数,除了特定的数字...

标签: c# algorithm


【解决方案1】:

让我们从退化的情况开始。如果我们有2 或更少的数字,我们总是有算术序列。 如果我们有3 或更多数字,让我们计算有限差异a[k + 1] - a[k]。例如

  array: 1, 3, 5, 7, 4, 9, 11
  fd:      2, 2, 2,-3, 5, 2

  array: 7, 3, 5, 7, 11, 13
  fd:     -4, 2, 2, 2, 2,  

  array: 1, 3, 5, 7, 11, 20
  fd:      2, 2, 2, 2,  9,

你能看到发生了什么吗?除了一个或两个值之外,所有差异都相等。 现在分两种情况:

  • 如果唯一的第一个差异是异常的,那么array[0]是异常的
  • 如果i-th 差异是异常的,那么array[i+1] 是异常的

【讨论】:

  • 非常感谢!我用我的代码编辑了我的帖子,但我认为它效率不高,我不太喜欢它。
【解决方案2】:

假设你有一个有序整数序列,从低到高,你想找到打破它的那个。

对于序列中的每个数字“k”,进行测试

  • 数组[k-1]
  • 数组[k]

相反,如果顺序是从高到低,则将 ''。

编辑:我们需要更多信息才能找到正确的解决方案。 在某些情况下,解决方案是模棱两可的。例如,给定序列 [2, 4, 7] 不可能说增量必须是+2,所以[2, 4] 是正确的,7 是错误的,或者增量必须是+3,那么2 是错误的,[4, 7] 是正确的。 我们怎么知道正确的增量是多少?

【讨论】:

  • 非常感谢!我用我的代码编辑了我的帖子,但我认为它效率不高,我不太喜欢它。
猜你喜欢
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2014-12-16
  • 1970-01-01
  • 2019-04-08
  • 2021-12-27
相关资源
最近更新 更多