Ruby 如果下一个元素较小,请删除
更新: 在ruby上,如果下一个元素比上一个元素小,我会尝试删除它 输入将是Ruby 如果下一个元素较小,请删除,ruby,algorithm,Ruby,Algorithm,更新: 在ruby上,如果下一个元素比上一个元素小,我会尝试删除它 输入将是 a = [2,1,3,4,7,6,8] a = [2,3,4,7,8] 因此,输出将是 a = [2,1,3,4,7,6,8] a = [2,3,4,7,8] 显然,如果没有,如果所有元素都是连续的,则不会删除任何元素。跟踪上一个值是什么,并使用“选择”筛选出不需要的值 a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last] # =&
a = [2,1,3,4,7,6,8]
a = [2,3,4,7,8]
因此,输出将是
a = [2,1,3,4,7,6,8]
a = [2,3,4,7,8]
显然,如果没有,如果所有元素都是连续的,则不会删除任何元素。跟踪上一个值是什么,并使用“选择”筛选出不需要的值
a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last]
# => [1, 3, 4, 6, 8]
prev = - 1.0/0.0 #negative infinity
a.select {|num| delete = (prev < num); prev = num; delete}
prev=-1.0/0.0#负无穷大
a、 选择{num | delete=(prev
在输入[2,1,3,4,7,6,8]上,这会给出输出[2,3,4,7,8]。我会这样做:
a.each_index.map { |i| a[i] if i < 1 || a[i-1] < a[i] }.compact
=> [2, 3, 4, 7, 8]
a.each_index.map{i|a[i]如果i<1|a[i-1] [2, 3, 4, 7, 8]
a=[2,1,3,4,7,6,8]
prev=a[0]
p.a.e|
prev,prev2=e,prev
上一篇>[2,3,4,7,8]
更新
正如@zetacu所说:
如果有[1,2,3]这样的数组,它会删除第一个数组
不,它不会停止工作
a = [1,2,3]
prev = a[0]
p a.chunk { |e|
prev, prev2 = e, prev
prev<prev2
}.flat_map{|i,j| j unless i }.compact
# >> [1, 2, 3]
a=[1,2,3]
prev=a[0]
p.a.e|
prev,prev2=e,prev
上一篇>[1,2,3]
您的问题陈述是错误的。您删除的数字是1和6。它们后面的元素更大,而不是更小。如果下一个元素比上一个元素小,您可能想删除它吗?yuri是的,让我更新它,它为我提供了[1,3,4,6,8]
。但他想要[2,3,4,7,8]
@YuriyGolobokov它给我的结果和给你的结果一样。看看我写的输出。OP是矛盾的。oops。是的,这个问题与示例不匹配。这个解决了问题,tnx yuriyi如果你有一个像[1,2,3]这样的数组它删除了第一个one@zetacu不,亲爱的!运行代码,它正在按预期工作..嗯,我的宝贝,也许我在控制台中键入了一些额外的内容如果你有一个像[1,2,3]这样的数组,它会删除第一个数组,嗯,它对我来说工作得很好。它似乎不应该在[1,2,3]上表现不好,因为-Infinity应该小于所有值。这可能是Ruby版本的差异吗?我使用的是2.0.0,你呢?我使用的是Ruby 1.9,出于某种原因,我正在删除第一个。检查prev是否在开始时实际上等于Infinity。这是输出