我试图解决一个编码问题。问题如下:
给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增序列。
例如:
[1,3,2,1]是错误的
[1,3,2]是真的
我用java实现了它。代码如下:
boolean almostIncreasingSequence(int[] sequence) {
int count =0;
for(int i =0; i < sequence.length; i++){
if (sequence[i] <= sequence[i-1]){
count++;
}
if(count>1){
return false;
}
if(sequence[i] <= sequence[i-2] && sequence[i+1] <= sequence[i-1]){
return false;
}
}
return true;
}
这是以下错误:
测试1上的执行错误:您的程序有运行时错误。
任何帮助都将不胜感激。这似乎是个小问题,但我解决不了。
2条答案
按热度按时间5jvtdoz21#
一个实现可以基于在未达到严格升序条件时仅移除1个元素。
输出
注意:当结果错误时,实现有一种情况
[1,5,2,3]
,只需使用另一个分支进行更新即可removed element=the previous one
(不是当前)并检查两个分支(一个为真表示为真)这应该可以解决这个问题
和使用
输出
看来又错了一个案子
[5,6,3,4]
,表示需要查看element[i-2]
(仅在移除元件后)不大于current
最后一个分支上的“prev”。6>3 remove 6 (prev=3, 3<4 but [5>4 or 5>3] so false)
```public static boolean removeCurrent(int[] sequence)
{
if(sequence==null) return false;
//mandatory to remove just 1 element, if no one remove then false
boolean flag_removed=false;
for(int i=1, prev=sequence[0], twoprev=Integer.MIN_VALUE;i<sequence.length;i++)
{
if(prev>=sequence[i] && flag_removed==false)
{
//mark removed
flag_removed=true;
if(i>=2) twoprev=sequence[i-2];
}
//if element was removed then false
else if(prev>=sequence[i] && flag_removed==true)
{
return false;
}
else if(twoprev>=sequence[i] || twoprev>=prev)
{
return false;
}
}
[5,6,3,4]
false
public class TestInc {
}
[1,1,2,3]
true
exdqitrt2#
当i==0时,此行将产生arrayindexoutofboundsexception,因为它将尝试访问序列[-1]