【问题标题】:How to count the number of unique absolute values in an array with Ruby?如何用 Ruby 计算数组中唯一绝对值的数量?
【发布时间】:2014-07-06 15:46:28
【问题描述】:

有一个给定的数组不是空的,它由 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 个绝对的、独特的价值吗?

谢谢。

【问题讨论】:

    标签: ruby arrays sorting


    【解决方案1】:

    Uniq 采用可选块 - 比较块的结果而不是值本身的唯一性 - 所以你可以这样做

    array.uniq(&:abs).length
    

    【讨论】:

      【解决方案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."
      

      【讨论】:

        【解决方案3】:

        这应该可行:

        array.map(&:abs).uniq.count
        

        【讨论】:

          【解决方案4】:
          [-5, -3, -1, 0, 3, 6].group_by(&:abs).length
          # => 5
          

          【讨论】:

            猜你喜欢
            • 2018-02-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-16
            • 2021-08-07
            相关资源
            最近更新 更多