在 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)
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP