在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]

更新于:2020年8月27日

139 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.