Python函数来查找排序列表中的第一个非负数



我有一个像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开始,因为如果第一个元素为正,它仍然会增加一次。离开只是表示停止搜索。

相关内容

最新更新