-2

更新:在 ruby​​ 上,如果下一个元素小于前一个元素,我将尝试删除它。

输入将是

a = [2,1,3,4,7,6,8]

所以输出将是

a = [2,3,4,7,8]

显然,如果没有,如果所有都是顺序的,则不会删除任何元素。

4

5 回答 5

2

我会这样做:

a.each_index.map { |i| a[i] if i < 1 || a[i-1] < a[i] }.compact
 => [2, 3, 4, 7, 8]
于 2013-07-14T04:30:12.263 回答
2
b = a.take(1) + a.each_cons(2).flat_map { |x, y| y >= x ? [y] : [] } 
#=> [2, 3, 4, 7, 8]
于 2013-07-14T07:53:42.697 回答
1
a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last]
# => [1, 3, 4, 6, 8]
于 2013-07-14T04:09:22.253 回答
0

跟踪以前的值是什么,并使用 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]。

于 2013-07-14T04:21:44.100 回答
0
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]
于 2013-07-14T05:40:58.400 回答