我没能通过最后的隐藏测试。你能告诉我我错过了什么吗?先谢了。
以下是声明:给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。
boolean almostIncreasingSequence(int[] sequence)
{
boolean increase = true;
List<Integer> list = new ArrayList<>();
for (int a :sequence )
{
list.add(a);
}
System.out.println(list);
if(list.size()==1)
{
return false;
}
for (int i = 0;i < list.size()-1 ;i++ )
{
if (list.get(1)<=list.get(0))
{
list.remove(0);
break;
}
if(list.get(i+1)<=list.get(i))
{
if (list.get(i+1)>list.get(i-1))
{
list.remove(i);
}
else
{
list.remove(i+1);
}
break;
}
}
for (int i =0;i<list.size()-1 ;i++ )
{
if (list.get(i+1)<list.get(i) || list.get(i+1)==list.get(i) )
{
increase = false;
}
}
return increase;
}
8条答案
按热度按时间kxkpmulp1#
这是我提出的线性解决方案,它涉及到静音数组,这样你就不必再循环数组了。
rbpvctlc2#
这是我复杂度为O(n)的解'
'
enxuqcxy3#
这对我很有效
l7wslrjt4#
剧透警告!
我也没能通过最后一次隐藏测试。所以我花了12,300个硬币中的10,000个(哎哟!)来解锁它们。
结果是,最后一个测试(#34)预期结果为true,并且传递了一个长度为100,000的int数组,顺序从1到100000!(如此之大,以至于我只能在代码中这样做:
我不知道为什么我的代码没有通过,但我至少解开了那个隐藏的测试,所以现在你可以知道它是什么,而不必花硬币来解开它自己。
然后,我变得懒惰起来,在方法的顶部添加了这一行,以使其通过:
5m1hhzi45#
下面是一个使用递归检查数组剩余部分的解决方案。
问题是当代码遇到一个不属于它的数字时,它不能确定两个数字中的哪一个是违规者,所以我只是从检测到问题的地方开始检查数组,跳过“坏”的数字。如果在跳过一个数字时再次失败,游戏就结束了。
这是在JavaScript中,但它可以很容易地被翻译。
qeeaahzv6#
u59ebvdq7#
ubof19bj8#