有一个给定的数组不是空的,它由N个值组成。数组按升序排序。
任务是编写一个函数来计算数组中唯一绝对值的数量。
例如,数组A是:
A [0] = -5
A [1] = -3
A [2] = -1
A [3] = 0
A [4] = 3
A [5] = 6
绝对数字是唯一的5,因为有5个唯一的绝对值是0,1,3,5,6。
假设:
N是整数范围[1 ... 100,000];数组a按升序排序。
到目前为止,我已经这样做了:
class AbsoluteUnique
def initialize int_array
puts "Enter content for the array:"
5.times do
int_array << gets
if A.size == 5
find_count
end
end
end
def find_count
end
end
显然这还不够,但我发现很难弄清楚功能的其余部分。能否帮我找到这5个绝对的,独特的价值观?
谢谢。
答案 0 :(得分:4)
Uniq采用可选块 - 比较块的结果是唯一性而不是值本身 - 所以你可以做
array.uniq(&:abs).length
答案 1 :(得分:2)
如果你有一个整数数组a
,那么:
a = [-5, -3, -1, 0, 3, 6]
这应该这样做:
a.map {|n| n.abs}.uniq.length
如果需要为标准输入采用数组,这将是这样做的方法:
a = []
puts "Enter 5 integers separated by newlines: "
until(a.length == 5)
a << gets.chomp.to_i
end
puts "There are #{a.map {|n| n.abs}.uniq.length} unique absolute values in your list."
答案 2 :(得分:2)
这应该有效:
array.map(&:abs).uniq.count
答案 3 :(得分:-1)
[-5, -3, -1, 0, 3, 6].group_by(&:abs).length
# => 5