python - 二进制数组 : Determine if all 1s in one array come before first 1 in the other

标签 python algorithm numpy bit-manipulation time-complexity

我一直在研究一个有趣的问题,我想我应该在这里发布它。问题如下:

给你两个数组,A 和 B,每个数组的元素都是 0 或 1。目标是确定 A 中的所有 1 是否都在 B 中的第一个 1 之前。你可以假设所有 1 都是连续的 - 2 个之间不能有 0。 (即你永远不会有 [1,0,1])。 一些例子:

正确:A = [0,1,1,0],B = [0,0,0,1]

正确:A = [1,0,0,0],B = [0,1,1,0]

错误:A = [0,0,0,1],B = [1,0,0,0]

错误:A = [0,1,1,0], B = [0,0,1,0]

您可以假设 len(A) = len(B) = N,但 N 可能非常大。因此,您不能简单地将整个数组转换为二进制数,因为它太大而无法表示。

我想以最有效的方式找到解决方案,最好是 O(1)。我一直在使用 Numpy 数组在 Python 中对此进行编码,因此您可以对数组执行逻辑运算(例如 A 和 B,它会告诉您 A 和 B 之间是否有任何 1 重叠)。很想知道您能想出什么解决方案!

最佳答案

如果你 checkout this question您可以找到如何获取 numpy 数组中最后一个“最大”值的索引。然后检查它是否小于 B 中的第一个 1 并且你很好。

import numpy as np
reverse_A = A[::-1]
i = len(reverse_A) - np.argmax(reverse_A) - 1
i < np.argmax(B)

关于python - 二进制数组 : Determine if all 1s in one array come before first 1 in the other,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50175706/

相关文章:

python - 我为 python3 安装了 PyOpenGl,当我导入包时出现值错误

java - 使用 radix-26 将名称转换为 key

java - 在n个竞争对手的比赛中安排k个位置

algorithm - 如何使用动态规划接近路由路径

python - 将 np.einsum 转换为性能更高的内容

python - 如何使用 Python FileNotFoundError 打印丢失文件的名称?

python - python 中的 gcloud 和 google-cloud 模块有什么区别

python - 将数据框保存为 Pandas 中的 csv/文本文件,无需行号

python - 将高度、宽度、 channel 数维度的图像转换为 n_masks、image_height、image_width

3d 数组平面上的 Numpy 求和,返回标量