我有一个像nums = [-4,-1,0,3,10]
这样的排序列表,我想找到第一个非负整数的索引。
向我提供了一个线性时间解决方案:
def find(nums):
n = len(nums)
i = 0
while i < n and nums[i] < 0:
i += 1
return i
这个问题是否有对数解?
可以保证列表中会有一个非负整数。
Python标准库有一个非常酷的库,名为平分,它将在列表上进行快速二进制搜索。在您的示例中,您可以通过使用bisect.bisect_right
来查找"来获得第一个非负数的索引;右";零点插入点:
from bisect import bisect_right
nums = [-4,-1,0,0,1,3,10]
index = bisect_right(nums, 0)
# 4 -- the index
nums[index]
# 1 -- the number at that index
如果没有非负数,它将返回一个等于列表长度的索引,所以如果有可能的话,你需要测试一下。
def find(nums):
leave = 0
index = -1
for num in nums:
if leave = 0
index += 1
if num > -1:
leave = 1
print(index)
return(index)
试试这个。索引从-1开始,因为如果第一个元素为正,它仍然会增加一次。离开只是表示停止搜索。