สมมติว่าเรามีอาร์เรย์ A และ B สองอาร์เรย์ ขนาดของ A คือจำนวนแถว และ A[i] คือจำนวนกล่องในแถวที่ ith และ 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 ทำ
-
A[i] :=A[i] + A[i - 1]
-
-
สำหรับฉันอยู่ในช่วง 0 ถึง len_b ทำ
-
row :=ดัชนีที่เราสามารถแทรก B[i] เพื่อรักษา A sort
-
ถ้าแถว>=1 แล้ว
-
box_num :=B[i] - A[row - 1]
-
-
มิฉะนั้น
-
box_num :=B[i]
-
-
แสดงคู่ (แถว + 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)