Python:获取space的最小长度,该长度捕获允许循环的数组的所有非零值
Python: get the minimum length of space that captures all the non zero values of an array with looping allowed
示例:
1)
v v
[1,0,0,1,1,1,1,0,1,1,0,0,0]
^ ^
将 return 结果为 10,因为这是 space 的 minimum length
,介于非零值的第一个实例和最后一个实例(粗体)之间。
如果我们改为考虑以下内容:
v v
[1,0,0,1,1,1,1,0,1,1,0,0,0]
^ ^
并循环捕获所有非零值,space 的长度为 13,所以 10 就是我们的答案。
2)
v v
[0,0,1,0,0,0,0,0,0,1,1]
^ ^
会 return 结果为 5,因为允许循环。如果我们改为考虑以下内容:
v v
[0,0,1,0,0,0,0,0,0,1,1]
^ ^
并且没有循环,space 的长度是 9,所以我们的答案是 5。
您可以使用 np.sign
+ np.argmax
来查找 第一个 non-zero 值的索引,并且 np.cumsum
+ np.argmax
找到 last non-zero 值的索引。然后减去那些:
>>> a = [1,0,0,1,1,1,1,0,1,1,0,0,0]
>>> np.cumsum(a).argmax() - np.sign(a).argmax() + 1
9
示例:
1)
v v
[1,0,0,1,1,1,1,0,1,1,0,0,0]
^ ^
将 return 结果为 10,因为这是 space 的 minimum length
,介于非零值的第一个实例和最后一个实例(粗体)之间。
如果我们改为考虑以下内容:
v v
[1,0,0,1,1,1,1,0,1,1,0,0,0]
^ ^
并循环捕获所有非零值,space 的长度为 13,所以 10 就是我们的答案。
2)
v v
[0,0,1,0,0,0,0,0,0,1,1]
^ ^
会 return 结果为 5,因为允许循环。如果我们改为考虑以下内容:
v v
[0,0,1,0,0,0,0,0,0,1,1]
^ ^
并且没有循环,space 的长度是 9,所以我们的答案是 5。
您可以使用 np.sign
+ np.argmax
来查找 第一个 non-zero 值的索引,并且 np.cumsum
+ np.argmax
找到 last non-zero 值的索引。然后减去那些:
>>> a = [1,0,0,1,1,1,1,0,1,1,0,0,0]
>>> np.cumsum(a).argmax() - np.sign(a).argmax() + 1
9