代码的目标是查看序列是否几乎是递增的,也就是说,可以通过删除单个元素使其严格递增。
例如:[1, 2, 1, 2]
几乎不会增加,因为如果你删除第一个'2',你会得到[1, 1, 2]
,它不是 * 严格 * 增加。
对于长度为2 <= len <= 10^5
的序列,我的代码必须在4000 ms以下工作。它可能会被很长的序列所占用。
代码如下:
def almostIncreasingSequence(sequence):
for i in range(len(sequence)):
c = sequence.pop(i)
if sequence == sorted(sequence):
for item in sequence:
if sequence.count(item) != 1:
break
else:
return True
sequence.insert(i, c)
return False
3条答案
按热度按时间23c0lvtd1#
你的“几乎增加”的条件可以用以下两个规则来重新措辞:
1.列表中最多有一个位置
i
不满足ai < ai+1
。1.该位置周围的元素满足条件
ai < ai+2
。这是一个可以在
O(n)
时间内轻松评估的问题:如果允许使用numpy:
选择树是为了清晰起见。它可以重写为单个return语句:
这两种解决方案都能正确地对
[6, 5, 6, 7]
和[1, 2, 3, 1]
等边缘情况做出React。bpsygsoo2#
计算
sequence
中相邻元素的差,并找出它不增加的频率(即差不为正的频率):情况4和5的不同之处在于从序列中删除的元素的选择。
9nvpjoqh3#
如果你提供一些测试就好了:p但是我尝试了一些东西,利用了当大小大于3时照顾连续性的重要性。只需要区分列表并确保n-3是1。希望我没有弄错