我正在 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/