python - 查找列表中的第一个符号变化
问题描述
我有一个整数列表 A,它是这样的:
- 透镜(A)≥2
- A 的第一个和最后一个元素有不同的符号
- A 的所有元素都不为零
我需要编写一个函数来检测第一个和最后一个元素旁边的第一个符号变化以及 O(log n) 的位置。是否可以?
def myFunction(A,begin):
if(begin >= len(A)):
return [A[0],A[len(A)-1]]
if(A[begin]>0):
if(A[begin+1]>0):
return myFunction(A,begin+1)
else:
return [A[begin],A[begin+1]]
else:
if (A[begin + 1] < 0):
return myFunction(A, begin + 1)
else:
return [A[begin], A[begin + 1]]
解决方案
这个解决方案是 O(log N),因为它将第一个元素与中间元素进行比较,然后只继续列表的前半部分或后半部分。但是,这仅在只有一个符号更改时才有效。
def find_sign_change(A):
if len(A) == 2:
return 1
i = len(A) // 2
if A[0] * A[i] < 0:
# different sign
return find_sign_change(A[:i+1])
else:
# same sign
return find_sign_change(A[i:]) + i
print(find_sign_change([3, 4, 6,-6,-5,-3,-5]))
>>> 3
print(find_sign_change([3,-4, 6, 6, 5, 3,-5]))
>>> 6
推荐阅读
- javascript - 如何在 jQuery 代码中实现 ::ng-deep 的功能
- c - 计算一个数字除以另一个数字的次数
- c# - 使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用
- excel - 如何在 Excel 中设置刷新顺序?包含数据库数据和更多层的数据透视表
- python - 用于弹性搜索的 Python API - 每次响应 10000
- ruby-on-rails - 无法在 Rails 5.1 中加载 google-cloud-text_to_speech Gem 的默认凭据
- ios - WKWebView iframe X-Frame-Options 是“拒绝”
- python - pandas:如何查询多级列数据框?
- javascript - 使用 dropzone 上传文件时出现问题
- api - Blogger API 中的 URL 和 customMetaData 选项