【发布时间】:2017-06-06 19:29:42
【问题描述】:
我正在做一个编码练习:
给定一个整数序列作为一个数组,判断是否有可能通过从数组中删除不超过一个元素来获得一个严格递增的序列。
示例
-
对于序列 = [1, 3, 2, 1],输出应该是 假的;
这个数组中没有一个元素可以被移除以获得严格递增的序列。
-
对于序列 = [1, 3, 2],输出应该是 是的;
您可以从数组中删除 3 以获得严格递增的序列 [1, 2]。或者,您可以删除 2 以获得严格递增的序列 [1, 3]。
.
所以我写了这段代码:
def almostIncreasingSequence(sequence):
first_list, second_list = [x for x in sequence], [x for x in sequence]
for i in range(len(sequence)-1):
if sequence[i] >= sequence[i+1]:
first_list.remove(sequence[i])
second_list.remove(sequence[i+1])
break
if first_list == sorted(set(first_list)) or second_list == sorted(set(second_list)):
return True
else:
return False
代码通过了 13/15 次测试。
以下是我的代码失败的 2 个输入:
[1, 2, 3, 4, 3, 6]
[3, 5, 67, 98, 3]
两个输入都应返回 True,但我的代码返回 False。有什么想法吗?
【问题讨论】:
-
sequence的类型是什么?是列表吗? -
是的,它是一个列表。
-
那么:
first_list, second_list = [x for x in sequence], [x for x in sequence]有什么意义? -
复制列表的pythonic方法是
first_list = sequence[:] -
@cezar 制作两个列表副本的目的是为了以后能够比较它们。