假设我们有一个大小变量N,我们还有一个变量SUM,它是数组中所有可用元素的总和,而另一个变量K,使得数组中没有元素大于K,我们必须找到一个正交数组数组中所有元素都不同的地方。如果没有解决方案,则返回-1。
因此,如果输入类似于N = 4,SUM = 16 K = 9,则输出将为[1,2,4,9]
为了解决这个问题,我们将遵循以下步骤-
minimum_sum:=(N *(N + 1))/ 2
maximum_sum:=(N * K)-(N *(N-1))/ 2
如果minimum_sum> SUM或maximum_sum <SUM,则
返回-1
res:=一个大小为N + 1的数组,并用0到N填充
总和:= minimum_sum
i:= N
当我> = 1,
res [i]:= res [i] +(SUM-总和)
总和:= SUM
从循环中出来
和:=和+(K-i)
res [i]:= K
K:= K-1
x:=和+(K-i)
如果x <SUM,则
除此以外,
我:=我-1
返回资源
让我们看下面的实现以更好地理解-
def get_arr(N, SUM, K): minimum_sum = (N * (N + 1)) / 2 maximum_sum = (N * K) - (N * (N - 1)) / 2 if (minimum_sum > SUM or maximum_sum < SUM): return -1 res = [i for i in range(N + 1)] sum = minimum_sum i = N while(i >= 1): x = sum + (K - i) if (x < SUM): sum = sum + (K - i) res[i] = K K -= 1 else: res[i] += (SUM - sum) sum = SUM break i -= 1 return res N = 4 SUM = 16 K = 9 print(get_arr(N, SUM, K))
4, 16, 9
输出结果
[0, 1, 2, 4.0, 9]