在 Python 中查詢包含給定球體的盒子的位置


假設我們有兩個陣列 A 和 B。A 的大小是行數,A[i] 是第 i 行中的盒子數。B 是球的陣列,其中 B[i] 表示球上的數字。給定球 i(值 B[i])將放置在一個從起始位置為 B[i] 的盒子裡。我們必須找到對應於每個 B[i] 的盒子的行和列。

因此,如果輸入類似於 A = [3, 4, 5, 6],B = [1, 3, 5, 2],則輸出將為 [(1, 1), (1, 3), (2, 2), (1, 2)],因為 B[0] = 1,則盒子的位置將是第 1 行,第 1 列;B[1] = 3,則盒子的位置將是第 1 行,第 3 列;B[2] = 5,則盒子的位置將是第 2 行,第 2 列;B[3] = 2,則盒子的位置將是第 1 行,第 2 列。

為了解決這個問題,我們將遵循以下步驟:

  • len_a := A 的大小

  • len_b := B 的大小

  • 對於範圍從 1 到 len_a 的 i,執行:

    • A[i] := A[i] + A[i - 1]

  • 對於範圍從 0 到 len_b 的 i,執行:

    • row := 我們可以插入 B[i] 以保持 A 有序的索引

    • 如果 row >= 1,則

      • box_num := B[i] - A[row - 1]

    • 否則,

      • box_num := B[i]

    • 顯示一個對 (row + 1, box_num)

示例

讓我們看看以下實現以獲得更好的理解:

 線上演示

import bisect
def get_position(A, B):
   len_a = len(A)
   len_b = len(B)
   for i in range(1, len_a):
      A[i] += A[i - 1]
   for i in range(len_b):
      row = bisect.bisect_left(A, B[i])
      if row >= 1:
         box_num = B[i] - A[row - 1]
      else:
         box_num = B[i]
      print ((row + 1, box_num))
A = [3, 4, 5, 6]
B = [1, 3, 5, 2]
get_position(A, B)

輸入

[3, 4, 5, 6], [1, 3, 5, 2]

輸出

(1, 1)
(1, 3)
(2, 2)
(1, 2)

更新於: 2020-08-27

195 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.