假设我们有两个数组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,则框位置将为第一行,第一列B [1] = 3,则框位置将为第一行,第三列,B [2] = 5,则框位置将为第二行,第二列,B [3] = 2,则框位置将为第一行,第二列
为了解决这个问题,我们将遵循以下步骤-
len_a:= A的大小
len_b:= B的大小
对于范围在1到len_a中的我,执行
A [i]:= A [i] + A [i-1]
对于范围在0到len_b之间的i,执行
box_num:= B [i]
box_num:= B [i]-A [行-1]
row:=一个索引,我们可以在其中插入B [i]来保持A排序
如果行> = 1,则
除此以外,
显示一对(行+ 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)