所以我正在检查可信网站的在线代码评估。我尝试了演示示例http://codility.com/c/intro/demoRVC9C9-W8X来熟悉系统。
给出了由N个不同整数组成的零索引数组A. 该数组包含[1 ..(N + 1)]范围内的整数,表示 只缺少一个元素。你的目标是发现失踪 元件。写一个函数:
class Solution {public int solution(int [] A); }
给定零索引数组A,返回值 缺少元素。例如,给定数组A使得:
A [0] = 2
A [1] = 3
A [2] = 1
A [3] = 5该函数应该按原样返回4 缺少的元素。假设:N是该范围内的整数 [0..100,000]; A的元素都是截然不同的;每个元素 数组A是[1 ..(N + 1)]范围内的整数。
复杂度:
预期的最坏情况时间复杂度为O(N);
预期的最坏情况空间复杂度为O(1),超出输入存储(不计入输入参数所需的存储空间)。
输入数组的元素可以是 修改。
这是我在Python中的解决方案:
def solution(A):
tmp = [ 0 for x in xrange( len(A) + 1 ) ]
for i,x in enumerate( A ):
tmp[ x - 1 ] = 1
return 1 + tmp.index( 0 )
我很确定我的解决方案不会被接受,因为空间复杂度是O(n),其中n是A的大小。但是系统以完美的分数接受了我的答案。我在这里错过了什么吗?
答案 0 :(得分:0)
我的解决方案从红宝石的角度来看它的基础。
ruby中的def solution(a)
(1..(a.count+1)).select{|x| !a.include?(x)}.first
end
python中的def solution(A):
# write your code in Python 2.7
return filter(lambda x: (x not in A), range(1, (len(A)+2)))[0]
答案 1 :(得分:0)
此解决方案产生了100/100
def solution(A):
if not A:
return 1
sumz=sum(xrange(1,(max(A)+1)))
if ((len(A)+1)) not in A:
return len(A)+1
a_sum=sum(A)
return sumz-a_sum
答案 2 :(得分:-1)
我在Ruby中的解决方案。
def solution(a)
return 1 if a.empty?
ac = a.count
((ac+1)*(ac+2))/2 - a.inject(0, :+)
end
.inject(0,:+)汇总数组中的元素。
答案 3 :(得分:-1)
刚开始lernig Python,这是我的100分解决方案:
def solution(A):
a=[]
a=A
a.sort()
b=0
if len(a)<1:
return 1
if a[0] != 1:
return 1
else:
for x in xrange(0,len(a)):
b=b+int(a[x])
if a[len(a)-1]==len(a)+1:
c=(1+len(a))*len(a)/2
d=b-a[len(a)-1]
e=c-d
return e
else:
return len(a)+1
我知道它不是很好我只是开始学习Python
答案 4 :(得分:-1)
这是两个复杂的情况。
简单地想。
步骤#1:命令数组 步骤#2:迭代通过有序数组。如果A [i]!= i + 1你已经为缺少的元素提供资金。如果循环遍历整个数组而不是最后一个元素丢失,则返回最后一个元素+ 1。
这是100%的解决方案。