如果下一个元素较小,则删除

时间:2013-07-14 04:07:13

标签: ruby algorithm

更新: 在ruby上我试图删除下一个元素,如果它比以前小。

输入将是

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

所以输出将是

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

显然,如果没有一个是顺序的,那么就不会删除任何元素。

5 个答案:

答案 0 :(得分:2)

我会这样做:

a.each_index.map { |i| a[i] if i < 1 || a[i-1] < a[i] }.compact
 => [2, 3, 4, 7, 8]

答案 1 :(得分:2)

b = a.take(1) + a.each_cons(2).flat_map { |x, y| y >= x ? [y] : [] } 
#=> [2, 3, 4, 7, 8]

答案 2 :(得分:1)

a.each_cons(2).reject{|x, y| x > y}.map(&:first) + [a.last]
# => [1, 3, 4, 6, 8]

答案 3 :(得分: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]。

答案 4 :(得分: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]