使用Java

时间:2018-11-18 09:11:13

标签: java

这是我面试问题的一部分。

  

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

     

例如,

     

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

     

almostIncreasingSequence(sequence) = false

     

此数组中没有任何一个元素可以删除以获取严格递增的序列。

     

对于序列= [1, 3, 2],输出应为

     

almostIncreasingSequence(sequence) = true

     

我们可以从数组中删除3以获得严格递增的序列[1, 2]。或者,我们可以删除2以获得严格递增的序列[1, 3]

     

如果可以从数组中删除一个元素以获得严格递增的序列,则该函数必须返回true,否则返回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]来增加计数器seq1seq2的部分。如何涵盖所有情况?

2 个答案:

答案 0 :(得分:2)

  

这如何涵盖所有情况?

不是。

此算法是错误的。

考虑输入数组

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

这不是不是几乎严格增加的顺序,因为您必须删除至少两个元素(例如4和9)以使其严格增加。

但是,您发布的代码将返回true,因为seq1 + seq2 == 2seq12,而seq20)。 / p>

可能的解决方案:

    在数组上迭代,比较每对相邻元素。
  1. 第一次发现对不是严格增加的对(a [i]> = a [i + 1]),则必须检查删除a [i]或a [i + 1]是否会使数组严格增加。
  2. 否则,您将继续测试阵列的其余部分。
    • 如果您发现另一对并不严格增加的对,则返回false。
    • 否则,您返回true。

答案 1 :(得分:2)

不,它不能涵盖所有情况。

如果是面试官提供的。

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