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