在Python中构建一个具有给定大小、总和和元素上限的不同元素数组
假设我们有一个大小变量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填充
sum := minimum_sum
i := N
当 i >= 1 时,执行:
x := sum + (K - i)
如果 x < SUM,则
sum := sum +(K - i)
res[i] := K
K := K - 1
否则,
res[i] := res[i] +(SUM - sum)
sum := SUM
跳出循环
i := i - 1
返回 res
示例
让我们看看下面的实现,以便更好地理解:
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]
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP