python - 查找列表中的正数个数
问题描述
我正在尝试使用 python 在列表中查找正数的数量,我希望代码在 O(log(n)) 中运行,如果有负数,列表的类型为正负数,它们将位于右侧列表和所有积极因素都在左侧。例如,如果输入是:
lst=[2,6,0,1,-3,-19]
输出是
4
我尝试了一些方法,但没有得到我想要的结果,这是我到现在为止得到的最后一种形式:
def pos_neg(lst):
if int(len(lst)) is 0 or (int(len(lst)) is 1 and lst[0] <0):
return 0
elif len(lst) is 1 and lst[0] >=0:
return 1
leng = (int(len(lst))) // 2
counter = 0
index = 0
while(leng != 0):
if lst[leng] >=0 and lst[leng+1] <0:
index = leng
break
if lst[leng] >=0 and lst[leng + 1] >=0:
if int(len(lst)) < leng + int(len(lst)):
return 0
else:
leng = (leng + int(len(lst))) // 2
if lst[leng] <0 and lst[leng + 1] <0:
leng = leng // 2
return index
解决方案
您可以使用递归。每次列表减半,所以复杂度为 O(logn)
def find_pos(start, end, l, count):
if(start > end):
return count
middle = start + (end-start)//2
if(l[middle] >= 0): # that means all left side is positive
count += (middle-start) + 1
return find_pos(middle+1, end, l, count)
else: # that means I am in wrong region
return find_pos(start, middle-1, l, count)
lst=[2,6,0,1,-3,-19]
find_pos(0, len(lst)-1, lst, 0)
>>> 4
更新:如果你想要一个只传递 lst 的函数
def find_positives(l):
return find_pos(0, len(l)-1, l, 0)
find_positives(lst)
推荐阅读
- apache-kafka - Kafka Connect 和 Debezium MySQL 源码 - 如何去掉消息 Key 中的 Struct{}?
- javascript - Firebase v9 版本的 firebase.apps.length
- python - 如何获取设备的COM端口并在python中更改它
- python - AttributeError:“NoneType”对象没有属性“get_attribute”
- kubernetes - 通过主机 VMs IP 暴露在 VM 上运行的本地 kubernetes 集群
- salesforce - 如何从 Sales Cloud 触发 Marketing Cloud 中的 Automation Studio
- laravel - 在数据库laravel 8中插入多条记录
- lightningchart - 将系列从一张图表移动到另一张图表
- azure - Azure API 确定提供程序操作类型
- python - 我似乎无法从终端访问某些功能