来道面试题

2018-03-24  本文已影响0人  不_一
如图

给定一个数组arr和一个常数d,实现一个函数,计算出在数组arr中,所有距离为d的元素数的数量,并计算出函数执行的时间复杂度和空间复杂度.
例如:

arr =  [3, 5, 8, 7, 8, 10] 
d = 2
abs(arr[0]-arr[1]) = d
abs(arr[1]-arr[3]) = d
abs(arr[2]-arr[5]) = d
abs(arr[4]-arr[5]) = d

一共四组,返回结果4
b) 计算出函数执行的时间复杂度和空间复杂度
c)对你写的函数写完整并有效的单元测试

l = [3, 5, 8, 7, 8, 10]
d = 2

l.sort()
i = 0
j = 1
cnt = 0
n = 0
while i <= len(l) - 1 and j <= len(l) - 1:
    if i < j and abs(l[i] - l[j]) == d:
        cnt += 1
        if l[i] == l[i + 1]:
            i += 1
        else:
            j += 1
        continue
    elif i < j and abs(l[i] - l[j]) > d:
        i += 1
    elif i < j and abs(l[i] - l[j]) < d:
        j += 1
    if i == j:
        j += 1

print(cnt)
上一篇下一篇

猜你喜欢

热点阅读