<p>您的适度算法在这里失败的原因(除了缺少的“=”作为回报)是,它只是计算大于下一个的元素,如果该计数大于1,则返回结果。</p>
<p>其中重要的是在每次从列表中删除一个元素后查看列表,并确认它仍然是一个<em>排序的</em>列表。</p>
<p>我在这方面的尝试非常短暂,适用于所有场景。它不满足练习中单独设置的最后一个隐藏测试集的时间限制。</p>
<p><a href="https://i.stack.imgur.com/KKnoX.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/KKnoX.png" alt="enter image description here"/></a></p>
<p>正如问题名称所暗示的,我直接想将列表与其排序版本进行比较,并在稍后处理“几乎”的情况—从而拥有almostIncreasingSequence。i、 e.:</p>
<pre><code>if sequence==sorted(sequence):
.
.
</code></pre>
<p>但正如问题所说:</p>
<blockquote>
<p>determine whether it is possible to obtain a strictly increasing sequence by <strong>removing no more than one element</strong> from the array (at a time).</p>
</blockquote>
<p>在迭代过程中,我一次删除一个元素,开始可视化列表,并检查列表的其余部分是否是其自身的排序版本。因此我想到:</p>
<pre><code>for i in range(len(sequence)):
temp=sequence.copy()
del temp[i]
if temp==sorted(temp):
.
.
</code></pre>
<p>在这里,我可以看到,如果这个条件对完整的列表是真的,那么我们有什么是必需的-一个almostIncreasingSequence!所以我用这种方式完成了我的代码:</p>
<pre><code>def almostIncreasingSequence(sequence):
t=0
for i in range(len(sequence)):
temp=sequence.copy()
del temp[i]
if temp==sorted(temp):
t+=1
return(True if t>0 else False)
</code></pre>
<p>这个解决方案在[1,1,1,2,3]这样的列表中仍然失败。
正如@rory daulton在他的评论中指出的,在这个问题中,我们需要区分“排序”和“递增序列”。当测试[1,1,1,2,3]被排序时,它按照问题中的要求处于递增序列上。为了处理这个问题,下面是最后一个代码,添加了一行条件来检查连续的相同数字:</p>
<pre><code>def almostIncreasingSequence(sequence):
t=0
for i in range(len(sequence)):
temp=sequence.copy()
del temp[i]
if temp==sorted(temp) and not(any(i==j for i,j in zip(sorted(temp), sorted(temp)[1:]))):
t+=1
return t>0
</code></pre>
<hr/>
<p>由于这仍然没有通过最后一个测试的执行时间限制(列表必须很大),我仍然在寻找是否有办法优化我的解决方案。</p>