更新:在 ruby 上,如果下一个元素小于前一个元素,我将尝试删除它。
输入将是
a = [2,1,3,4,7,6,8]
所以输出将是
a = [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]
b = a.take(1) + a.each_cons(2).flat_map { |x, y| y >= x ? [y] : [] }
#=> [2, 3, 4, 7, 8]
a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last]
# => [1, 3, 4, 6, 8]
跟踪以前的值是什么,并使用 select 过滤掉您不想要的值。
prev = - 1.0/0.0 #negative infinity
a.select {|num| delete = (prev < num); prev = num; delete}
在输入 [2, 1, 3, 4, 7, 6, 8] 上,这给出了输出 [2, 3, 4, 7, 8]。
a = [2,1,3,4,7,6,8]
prev = a[0]
p a.chunk { |e|
prev, prev2 = e, prev
prev<prev2
}.flat_map{|i,j| j unless i }.compact
# >> [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]