代码之家  ›  专栏  ›  技术社区  ›  Seungho Lee

使用Java检查序列是否几乎严格按升序排列

  •  1
  • Seungho Lee  · 技术社区  · 7 年前

    给定一个整数序列作为数组,我必须确定是否有可能通过从数组中删除不超过一个元素来获得严格递增的序列。

    例如,

    sequence = [1, 3, 2, 1] ,输出应为

    almostIncreasingSequence(sequence) = false

    此数组中没有一个元素可以删除以获得>严格递增序列。

    顺序= [1, 3, 2]

    almostIncreasingSequence(sequence) = true

    [1, 2] [1, 3] .

    false .

    面试官想要的概念算法如下所示 JAVA :

    boolean almostIncreasingSequence(int[] sequence) {
        int seq1 = 0;
        int seq2 = 0;
    
        for(int i = 0; i < sequence.length - 1; i++){
            if(sequence[i] >= sequence[i + 1]) seq1++;
        }
    
        for(int k = 0; k < sequence.length - 2; k++){
            if(sequence[k] >= sequence[k + 2]) seq2++;
        }
    
        return !(seq1 + seq2 > 2);
    }
    

    sequence[i] 具有 sequence[i+1] sequence[i+2] seq1 seq2 . 这如何涵盖所有的案例?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Eran    7 年前

    这如何涵盖所有的案例?

    这个算法是错误的。

    考虑输入数组

    {1,2,3,5,4,6,7,9,8}
    

    它是 一个几乎严格递增的序列,因为必须移除至少两个元素(例如,4和9)才能使其严格递增。

    但是,您发布的代码将返回 true 自从 seq1 + seq2 == 2 seq1 2 seq2 0 ).

    一种可能的解决办法:

      • 如果删除[i],则必须确保[i-1]<a[i+1]。
      • 如果删除[i+1],则必须确保[i]<a[i+2]。
      • false .
    1. 否则,您将继续测试阵列的其余部分。
      • 如果您发现另一对不严格增加,则返回false。
        2
  •  1
  •   Md. Mokammal Hossen Farnan    7 年前

    不,它不包括所有的案例。

    他们实际上测试了您跟踪此代码的实际错误并在必要时进行修改的能力。并询问修改代码前后发生的事情的正确原因。