给定一个整数序列作为一个数组,确定是否可以通过从数组中移除不超过一个元素来获得一个严格递增的序列。
almostIncreasingSequence(sequence) = false;
almostIncreasingSequence(sequence) = true.
def almostIncreasingSequence(sequence):
c= 0
for i in range(len(sequence)-1):
if sequence[i]>=sequence[i+1]:
c +=1
return c<1
input: [1, 3, 2]
Output:false
Expected Output:true
Input: [10, 1, 2, 3, 4, 5]
Output: false
Expected Output: true
Input: [0, -2, 5, 6]
Output: false
Expected Output: true
input: [1, 1]
Output: false
Expected Output: true
Input: [1, 2, 3, 4, 3, 6]
Output: false
Expected Output: true
Input: [1, 2, 3, 4, 99, 5, 6]
Output: false
Expected Output: true
你的算法太简单了。您有一个正确的想法,检查连续的元素对,较早的元素小于较晚的元素,但需要更多。
制作一个例程first_bad_pair(sequence)
,检查所有元素对是否都按顺序排列。如果是,返回值-1
。否则,返回前面元素的索引:这将是从0
到n-2
的值。然后,一个可行的算法是检查原始列表。如果它工作,很好,但如果不工作,尝试删除早期或后来的冒犯元素。如果这两个中的任何一个有效,就可以,否则就不行。
我可以想到其他算法,但这一个似乎是最简单的。如果您不喜欢通过组合原始列表的两个切片而生成的多达两个临时列表,则可以通过使用更多If
语句在原始列表中进行比较来实现等效。
下面是通过所有测试的Python代码。
def first_bad_pair(sequence):
"""Return the first index of a pair of elements where the earlier
element is not less than the later elements. If no such pair
exists, return -1."""
for i in range(len(sequence)-1):
if sequence[i] >= sequence[i+1]:
return i
return -1
def almostIncreasingSequence(sequence):
"""Return whether it is possible to obtain a strictly increasing
sequence by removing no more than one element from the array."""
j = first_bad_pair(sequence)
if j == -1:
return True # List is increasing
if first_bad_pair(sequence[j-1:j] + sequence[j+1:]) == -1:
return True # Deleting earlier element makes increasing
if first_bad_pair(sequence[j:j+1] + sequence[j+2:]) == -1:
return True # Deleting later element makes increasing
return False # Deleting either does not make increasing
如果您确实想避免这些临时列表,下面是其他代码,它有一个更复杂的对检查例程。
def first_bad_pair(sequence, k):
"""Return the first index of a pair of elements in sequence[]
for indices k-1, k+1, k+2, k+3, ... where the earlier element is
not less than the later element. If no such pair exists, return -1."""
if 0 < k < len(sequence) - 1:
if sequence[k-1] >= sequence[k+1]:
return k-1
for i in range(k+1, len(sequence)-1):
if sequence[i] >= sequence[i+1]:
return i
return -1
def almostIncreasingSequence(sequence):
"""Return whether it is possible to obtain a strictly increasing
sequence by removing no more than one element from the array."""
j = first_bad_pair(sequence, -1)
if j == -1:
return True # List is increasing
if first_bad_pair(sequence, j) == -1:
return True # Deleting earlier element makes increasing
if first_bad_pair(sequence, j+1) == -1:
return True # Deleting later element makes increasing
return False # Deleting either does not make increasing
这是我用过的测试。
print('\nThese should be True.')
print(almostIncreasingSequence([]))
print(almostIncreasingSequence([1]))
print(almostIncreasingSequence([1, 2]))
print(almostIncreasingSequence([1, 2, 3]))
print(almostIncreasingSequence([1, 3, 2]))
print(almostIncreasingSequence([10, 1, 2, 3, 4, 5]))
print(almostIncreasingSequence([0, -2, 5, 6]))
print(almostIncreasingSequence([1, 1]))
print(almostIncreasingSequence([1, 2, 3, 4, 3, 6]))
print(almostIncreasingSequence([1, 2, 3, 4, 99, 5, 6]))
print(almostIncreasingSequence([1, 2, 2, 3]))
print('\nThese should be False.')
print(almostIncreasingSequence([1, 3, 2, 1]))
print(almostIncreasingSequence([3, 2, 1]))
print(almostIncreasingSequence([1, 1, 1]))
我正试图解决同设计街机的挑战,几乎一直在增加序列。 任务是找出是否可以通过移除不超过一个元素来得到一个严格递增的序列。 我的代码通过了19个测试用例中的17个。我明白为什么其中一个测试用例失败了。不过,我不明白为什么这次失败了: 输入:序列:[3,5,67,98,3]输出:false预期输出:true控制台输出:“计数器:4” 我不明白,为什么它返回计数器=4。
问题解决了在这种环境下
我看过一些关于这个问题的帖子,我想我的逻辑和他们的答案差不多。但我找不到我到底错在哪里。 我的代码首先检查提供的的长度,如果长度小于或等于2,则自动返回. 接下来,它删除()第一个元素,并检查其余元素是否按升序排列。 如果不符合顺序,它将用序列替换它,并重复第二步,但这次将删除下一个元素()。 这将继续进行,直到不再有要移除的元素,最终返回 如果在任何迭代中发现列表是升序的,则函数返回. 这是代码
Windows 用tutorial进行的操作 若要进行pull操作,请右击tutorial目录,并选择‘拉取’。 用tutorial进行的操作 在以下画面点击‘确定’。 用tutorial进行的操作 我们看到画面上的警告信息表示自动合并失败。请点击‘关闭’以退出窗口。 用tutorial进行的操作 若您确认变更,请点击‘Yes’。 用tutorial进行的操作 TortoiseGit告诉我们:因"
在上一个页面我们提及到,执行合并即可自动合并Git修改的部分。但是,也存在无法自动合并的情况。 如果远程数据库和本地数据库的同一个地方都发生了修改的情况下,因为无法自动判断要选用哪一个修改,所以就会发生冲突。 Git会在发生冲突的地方修改文件的内容,如下图。所以我们需要手动修正冲突。 ==分割线上方是本地数据库的内容, 下方是远程数据库的编辑内容。 如下图所示,修正所有冲突的地方之后,执行提交。
我们已经探索了 Python 语言中的许多部分,现在我们将通过设计并编写一款程序来了解如何把这些部分组合到一起。这些程序一定是能做到一些有用的事情。这其中的方法就是去学习如何靠你自己来编写一份 Python 脚本。 问题 我们希望解决的问题如下: 我想要一款程序来备份我所有的重要文件。 虽然这是一个简单的问题,但是其中并没有足够的信息有助于让我们开始规划一份解决方案。我们需要进行一些分析(Anal