python - 对第一个平方大于或等于 k 的元素进行二分查找
问题描述
我正在编写一段代码来查找排序列表中第一个元素的索引,其平方大于或等于某个 k。我使用普通的二进制搜索作为框架并对其进行了修改以满足我的需要。我的想法是,平方大于或等于某个 k 的第一个元素本身应该大于或等于 k,并且其左侧的元素(列表已排序)的平方应该小于 k。我考虑了这些条件,当正确答案是索引 1(列表中的“4”)时,程序只返回正确答案,并且它立即返回 -1 和大多数另一个 k。我尝试调试它但没有成功,请帮助我!谢谢你!
def Bsearch(a, k):
high = len(a) - 1
low = 0
while high > low:
mid = (high - low) // 2
num = a[mid] * a[mid]
left = a[mid - 1] * a[mid - 1]
if num >= k and left < k:
return mid
elif left >= k:
return Bsearch(a[:mid], k)
elif num < k:
return Bsearch(a[mid + 1:], k)
return -1
a = [1, 4, 5, 6, 7, 8, 19, 20]
k = 45
print(Bsearch(a, k))
解决方案
推荐阅读
- html - 在 html textarea 标签中自动占用 4 个空格
- r - 如何训练具有多个不同长度向量的 SOM?(使用 R 包 kohonen 或其他)
- google-maps - 谷歌地图:NotLoadingAPIFromGoogleMapsError Angular
- flutter - flutter bloc package yeild 在状态管理中不起作用
- angular-material2 - OverlayContainer 与 FullscreenOverlayContainer
- angular - 如何在不刷新页面的情况下自动更新离子列表上的数据
- django - Django Rest Framework 断言错误:缺少 Meta.model 属性
- reactjs - 材质 UI 选择组件未选择输入值
- python - 运行我的代码时出现奇怪的“FileNotFoundError”
- java - Groovy/Java 中有什么方法可以识别调用静态方法的子类吗?