【发布时间】:2020-01-15 10:36:18
【问题描述】:
def findNumber(N,A,B):
return count
Count 是数组子集的总数 - [1,2,3,...,N] 满足这些条件:
1.所有子集都应该是连续的。
2。任何子集都不应包含 A[i] 和 B[i](顺序无关紧要)。
例子
N = 3,A=[2,1,3],B=[3,3,1]
所有子集 = [1],[2],[3],[1,2],[2,3],[1,2,3]
无效的子集 = [2,3] 因为 A[0] 和 B[0] 在其中。 [1,2,3] 因为它包含 A[1],B[1] 和 A[2],B[2]
所以计数将是 4。
我能够计算出连续子集的总数将是 N(N+1)/2,但我被困在如何满足条件 2 上。
我已尽力解释它,如果需要,请要求澄清。
编辑
def findallvalid(n,a,b):
for w in range(1, n+1):
for i in range(n-w+1):
if not((a[0],b[0]) in (i+1,i+w+1)):
yield range(i+1,i+w+1)
我尝试了这段代码,但我不知道如何迭代 a 和 b 的所有值而不会使它变得非常慢。它已经在 n>10^2 时变慢了。
1
【问题讨论】:
-
请用您已有的代码更新问题。
-
当你说“不子集应该包含
A[i]和B[i]”时,你的意思是只有当A[i]和B[i]时子集才无效在那个子集中,对于相同的i? -
@00 是的,这是唯一的条件,除了子集是连续的。
-
@CosminStaicu 我将我的代码添加到问题中。
-
A 和 B 的最大或典型长度是多少?