我用来改进编码的工具之一是Codefights。我已经被困在同一个问题上好几天了,可以使用一些帮助来解决这个问题。谁能告诉我我在这里做错了什么?
以下是 CodeFights 的说明:
给定一个整数序列作为数组,确定是否可以通过从数组中删除不超过一个元素来获得严格递增的序列。
例子
对于sequence = [1, 3, 2, 1],输出应该几乎是IncreasingSequence(sequence) = false;
这个数组中没有一个元素可以被删除以获得严格递增的序列。
对于 sequence = [1, 3, 2],输出应该是几乎IncreasingSequence(sequence) = true。
您可以从数组中删除 3 以获得严格递增的序列 [1, 2]。或者,您可以删除 2 以获得严格递增的序列 [1, 3]。
输入输出
[时间限制] 4000ms (rb) [输入] array.integer 序列
约束:2 ≤ sequence.length ≤ 105,-105 ≤ sequence[i] ≤ 105。
[输出] 布尔值
如果可以从数组中删除一个元素以获得严格递增的序列,则返回 true,否则返回 false。
下面是我正在尝试的代码。我进去puts "#{prev}"
了几次,看看prev
最初设置了什么,在 a1
被添加到wrong
最后,所以最后prev
记录了。
def almostIncreasingSequence(sequence)
prev = [sequence[0], sequence[1]].min
puts "#{prev}"
wrong = 0
(sequence.length - 1).times do |num|
if prev < sequence[num + 1]
prev = sequence[num + 1]
else
wrong += 1
return false if wrong == 2
puts "#{prev}"
end
end
puts "#{prev}"
true
end
这是目前唯一不能通过的测试:
(almostIncreasingSequence([1, 2, 3, 4, 99, 5, 6])
这应该是正确的,因为99
可以拉出并且增加序列可以继续。但是false
好像wrong
只加了一次之后就返回了。
如果代码应该返回false
,如果wrong == 2
从puts "#{prev}"
输出中,我可以看到它prev
起源于1
并且在超过wrong
时触发a并且因为应该只在我不明白为什么它立即返回。如果我在第一次添加a 之后设置,我可以让这个测试通过,但是很多其他测试都不会通过。这是我正在尝试的其他测试的列表。大多数是 Codefights 要求您在进入下一个练习代码之前通过的测试。99
5
wrong
1
false
prev = sequence[num - 1]
wrong
(almostIncreasingSequence([1, 3, 2])) #true
(almostIncreasingSequence([1, 2, 1, 2])) #false
(almostIncreasingSequence([10, 1, 2, 3, 4, 5])) #true
(almostIncreasingSequence([0, -2, 5, 6]) )#true
(almostIncreasingSequence([1, 2, 3, 4, 5, 3, 5, 6])) #false
(almostIncreasingSequence([40, 50, 60, 10, 20, 30])) #false
(almostIncreasingSequence([1, 2, 3, 4, 3, 6])) #true
(almostIncreasingSequence([100, 200, 300, 400, 99, 500, 600])) #true
(almostIncreasingSequence([1, 3, 2, 1])) #false
(almostIncreasingSequence([1, 4, 10, 4, 2])) #false
(almostIncreasingSequence( [1, 1, 1, 2, 3])) #false
(almostIncreasingSequence([1, 1])) #true
(almostIncreasingSequence([10, 1, 2, 3, 4, 5, 6, 1])) #false
提前感谢您对这个问题的任何了解。