【发布时间】:2021-04-23 20:36:01
【问题描述】:
求偶数异或的子数组个数(子数组的异或表示其元素的异或)。 例如:
l=[1,2,3,4] # ----> Answer of this is 4
(解释:[2],[4],[1,2,3],[1,2,3,4]---> 这些是偶数异或的子数组,因此子数组的数量=4 )
这是我的代码:
def odd_int(lst):
odd=0
for i in lst:
if i%2!=0:
odd+=1
return odd
l=list(map(int,input().split()))
x=0 # Denotes number of even xor arrays
for i in range(len(l)):
for j in range(i,len(l)):
l1=l[i:j+1]
y=odd_int(l1)
if y%2==0:
x+=1
print(x)
上面的代码超过了时间限制,所以有什么建议可以优化到O(n)??? 谢谢你的时间!!!
【问题讨论】:
-
您能分享一下
input array的大小吗?也许考虑使用dict将时间减少到 O(n)?而是。 -
输入数组可以大到100000,所以现在你可以决定
-
您的解决方案是 O(n^3)。请注意,
i和j上的前两个循环在 O(n^2) 时间内计算子数组。但是,您的odd_int函数接受一个列表并重新计算 XOR,它本身是 O(n)。您应该首先专注于首先减少到 O(n^2)(不太困难),然后在需要时尝试进一步优化。稳步减少使用的计算量应该可以帮助您获得所需的结果。 -
有一个O(n)的解决方案,我相信带前缀计算的hashmap可以做到。
标签: python python-3.x algorithm performance dynamic-programming