ruby - Codility 置换赋值

标签 ruby algorithm big-o

我正在 codility.com 上执行排列任务。目标基本上是检查数组是否作为与排列大小完全匹配的一个元素传递。 IE。对于 array size N,它应该包含值 1,2,3...N,每个值恰好一次。我设法让逻辑正确,尽管我在复杂性上的分数很糟糕 0(N**2)。我该如何改进?

def solution(a)
  return 0 unless a.uniq == a
  set = (1..a.size).to_a 
  for n in set
    return 0 unless a.include? n
  end
  1
end

最佳答案

我倾向于按如下方式进行。我没有处理 a 为空或包含除 Fixnums 以外的元素的可能性。

def solution(a)
  (a.uniq == a && a.min == 1 && a.max == a.size) ? 1 : 0
end

solution([1,2,3,4,5])   #=> 1
solution([1,2,5,3,4])   #=> 1
solution([1,2,3,5,6])   #=> 0
solution([1,2,5,4,2])   #=> 0
solution([1,2,2,4,5])   #=> 0
solution([1,2,5,4,6])   #=> 0

关于ruby - Codility 置换赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24295767/

相关文章:

ruby - 如何修改 Ruby 类?

algorithm - switch 语句的运行时复杂度是多少?

ruby-on-rails - 为什么 Ransack 在每个循环中执行查询

ruby-on-rails - IntelliJ Ruby 语法高亮显示

java - 算法:合并重叠片段

检查关系传递性的算法?

c - 在动态数组的摊销分析中考虑 malloc 是否错误?

c - 此代码的大 O 符号

ruby-on-rails - 如何将小数舍入到 Ruby 中的第一个有效数字

algorithm - 运行趋势或无趋势 Twitter 谣言项目