比较来自世界各地的卖家的域名和 IT 服务价格

同一任务的解决方案 python

经过
http://blog.codility.com/2011/ ... .html
任务是解决均衡问题。 序列的平衡指数是这样的索引,其中较低指数处的元素量等于更高索引处的元素量。

例如,在序列中 A:


A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0


IE


A = [-7, 1, 5, 2, -4, 3, 0]


3是均衡指数,因为:


A[0]+A[1]+A[2]=A[4]+A[5]+A[6]


6 也是一个均衡指数,因为:


A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0


当我试图编写超级答案答案时,即:


def solution/A/:
for i in range/len/A//:
if sum/A[:i]/ == sum/A[i+1:]/:
return i
return -1


我得到了最困难的困难
O/N**2/

.

为什么这么做?

如何获得最好的难度案例
O/N/

?

它给我了吗?
O/N/

?

为什么这么做?


def solution/A/:
total = sum/A/
sum_left = 0
for i in range/len/A//:
sum_right = sum - sum_left
if sum_left == sum_right:
return i
return -1
已邀请:

风见雨下

赞同来自:

是的,你的解决方案 -
O/N/

, 这是因为您只重复一次列表,并且每次迭代
O/1/

. 您以前的决定也通过列表重复,但它总结了每次迭代中的所有元素,也迭代
O/N/

, 导致了总共
O/N^2/

.

但我认为你的决定是错误的 - 你没有累积
sum_left

. 你必须添加
A[i]

在循环内。

帅驴

赞同来自:

只是为了调整休休答,这项运动要求您退回其中一个均衡指数。 /或者 -1, 如果找不到/, 而不是发电机,所以通过解决方案如下:


def solution/A/:
sum_left, sum_right = 0, sum/A/
for index, value in enumerate/A/:
sum_right -= value
if sum_left == sum_right:
return index
sum_left += value
return -1

涵秋

赞同来自:

作为发电机函数重写 ,


def solution/a/:
sum_left, sum_right = 0, sum/a/
for index,value in enumerate/a/:
sum_right -= value
if sum_left == sum_right:
yield index
sum_left += value


然后找到所有的解决方案


list/solution/[-7, 1, 5, 2, -4, 3, 0]// # => [3, 6]

要回复问题请先登录注册