一个简单例子的空间复杂性

时间:2013-09-02 08:32:36

标签: python space-complexity

所以我正在检查可信网站的在线代码评估。我尝试了演示示例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的大小。但是系统以完美的分数接受了我的答案。我在这里错过了什么吗?

5 个答案:

答案 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%的解决方案。