这是我面试问题的一部分。
给定一个整数序列作为数组,我必须确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。
例如,
对于
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]
来增加计数器seq1
和seq2
的部分。如何涵盖所有情况?
答案 0 :(得分:2)
这如何涵盖所有情况?
不是。
此算法是错误的。
考虑输入数组
{1,2,3,5,4,6,7,9,8}
这不是不是几乎严格增加的顺序,因为您必须删除至少两个元素(例如4和9)以使其严格增加。
但是,您发布的代码将返回true
,因为seq1 + seq2 == 2
(seq1
是2
,而seq2
是0
)。 / p>
可能的解决方案:
答案 1 :(得分:2)
不,它不能涵盖所有情况。
如果是面试官提供的。
他们实际上测试了您跟踪此代码实际错误并在必要时进行修改的能力。并询问修改代码前后的正确原因。