二分查找及几种变体的Python实现
1. 在不重复的有序数组中,查找等于给定值的元素
循环法
def search(lst, target):
n = len(lst)
if n == 0:
return -1
low = 0
high = n - 1
while low <= high:
mid = (high-low)//2 + low
if lst[mid] == target:
return mid
elif lst[mid] < target:
low = mid +1
elif lst[mid] > target:
high = mid -1
return -1
递归法
def search2(lst, target, low, high):
if low > high:
return -1
mid = (high-low)//2 + low
if lst[mid] == target:
return mid
elif lst[mid] < target:
return search2(lst, target, mid+1, high)
elif lst[mid] > target:
return search2(lst, target, low, mid-1)
2. 查找第一个值等于给定值的元素
def bsearch(lst, value):
n = len(lst)
if n == 0:
return -1
low = 0
high = n - 1
while low <= high:
mid = (high-low) // 2 + low
if lst[mid] < value:
low = mid + 1
elif lst[mid] > value:
low = mid - 1
elif lst[mid] == value:
if mid == 0 or lst[mid-1] != value:
return mid
else:
high = mid - 1
return -1
3. 查找最后一个值等于给定值的元素
def bsearch(lst, value):
n = len(lst)
if n == 0:
return -1
low = 0
high = n - 1
while low <= high:
mid = (high-low) // 2 + low
if lst[mid] > value:
high = mid - 1
elif lst[mid] < value:
low = mid + 1
elif lst[mid] == value:
if mid == n-1 or lst[mid+1] != value:
return mid
else:
low = mid + 1
return -1
4. 查找第一个大于等于给定值的元素
def bsearch(lst, value):
n = len(lst)
if n == 0:
return -1
low = 0
high = n - 1
while low <= high:
mid = (high-low) // 2 + low
if lst[mid] < value:
low = mid + 1
elif lst[mid] >=value:
if mid == 0 or lst[mid-1] < value:
return mid
high = mid - 1
5. 查找最后一个小于等于给定值的元素
def bsearch(lst, value):
n = len(lst)
if n == 0:
return -1
low = 0
high = n - 1
while low <= high:
mid = (high-low) // 2 + low
if lst[mid] > value:
high = mid - 1
elif lst[mid] <= value:
if mid == n-1 or lst[mid+1] > 0:
return mid
low = mid + 1
return -1
二分查找及几种变体的Python实现的更多相关文章
- (转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)
干货 | 图解LSTM神经网络架构及其11种变体(附论文) 2016-10-02 机器之心 选自FastML 作者:Zygmunt Z. 机器之心编译 参与:老红.李亚洲 就像雨季后非洲大草原许多野 ...
- PriorityQueue和Queue的一种变体的实现
队列和优先队列是我们十分熟悉的数据结构.提供了所谓的“先进先出”功能,优先队列则按照某种规则“先进先出”.但是他们都没有提供:“固定大小的队列”和“固定大小的优先队列”的功能. 比如我们要实现:记录按 ...
- 【Python】Http Post请求四种请求体的Python实现
前言 前几天一个刚接触Python不深的朋友问我的Python的xml格式Post请求怎么发送,刚好最近也在学习Http请求相关的内容,所以决定总结一下各类Post请求的Python实现. Happy ...
- LeetCode总结--二分查找篇
二分查找算法尽管简单,但面试中也比較常见.经经常使用来在有序的数列查找某个特定的位置.在LeetCode用到此算法的主要题目有: Search Insert Position Search for a ...
- 二叉查找树及B-树、B+树、B*树变体
动态查找树主要有二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree), 红黑树 (Red-Black Tree ), 都是典型的 ...
- js实现二分查找算法
二分查找:是一种搜索某个值的索引的算法. 基本条件:有序的数组. 思路:1.将数组折半,分成左右两个数组. 2.判断要查找的数和中间位置数值的大小,来判断要查找的数实在哪一半. 3.之后继续折半查找, ...
- 【算法】二分查找法&大O表示法
二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...
- JS算法之二分查找
二分查找法主要是解决「在一堆有序的数中找出指定的数」这类问题,不管这些数是一维数组还是 多维数组,只要有序,就可以用二分查找来优化. 二分查找是一种「分治」思想的算法,大概流程如下: 1.数组中排在中 ...
- 二分查找法(binary_search,lower_bound,upper_bound,equal_range)
binary_search(二分查找) //版本一:调用operator<进行比较 template <class ForwardIterator,class StrictWeaklyCo ...
随机推荐
- 左偏树 (p3261) 对我来说是一道进阶题
题意:有n座城池,m个人: 每座城池有一个耐久度: 每座城池有一个父亲城池(肯定会形成一棵树),还有flag base (这个看题意) 每个人有一个战力值和一个开始进攻的城池序号: 问:1.每个城池能 ...
- 转载:initcall
转自:http://blog.chinaunix.net/uid-29570002-id-4387097.html Linux系统启动过程很复杂,因为它既需要支持模块静态加载机制也要支持动态加载机制. ...
- VMware克隆centos后需要进行修改配置的地方
1. 首先在VMware中通过复制现在状态的虚拟机或者快照形式的虚拟机,选择完整复制文件进行克隆. 2.打开克隆的虚拟机之后,需要修改主机名和相应的hosts表 2.1 修改主机名 输入 vi /e ...
- Dart语言学习(四)Dart字符串
一.字符串的创建 使用 单引号,双引号 创建字符串 使用 三个引号或双引号 创建多行字符串 使用 r 创建原始 raw 字符串 String str1 = 'Hello';//"" ...
- 将linux上的项目传到github上
在网友的帮助下,终于学会了这一招. 1.首先要确定你的linux上有安装了git. 2.到你的网页github上新建一个仓库,将其clone到linux上. 3.将你的项目放进这个空的仓库(文件夹). ...
- opencv:截取 ROI 区域
Rect roi; roi.x = 100; roi.y = 100; roi.width = 250; roi.height = 200; // 截取 ROI 区域 // 这种方式改变 sub,原图 ...
- wordpress 上传图片出现权限或者http错误
首先上传图片的时候出现了 5.jpg 无法建立目录“wp-content/uploads”/2018/07.有没有上级目录的写权限? 然后啊,找方法啊 1.把var/www/wp-content/up ...
- wordpress 修改默认分页条数
哎,终于快做完了,今天弄了弄分页,真是网上扒的模板太高级了,把分页和导航的css和js冲突了,终于解决了, 然后有一个模板是三和一排显示的,其他的是单挑显示的,它默认10条,我寻思改成9条,找了半天, ...
- 在 Fabric 中使用私有数据
本教程将演示收集器(collection)的使用,收集器为区块链网络上已授权的组织节点 提供私有数据的存储和检索. 本教程假设您已了解私有数据的存储和他们的用例.更多的信息请参阅 私有数据 . 本教程 ...
- 3、高级方法(Advanced Recipes)
学习目录:树莓派学习之路-GPIO Zero 官网地址:https://gpiozero.readthedocs.io/en/stable/recipes_advanced.html 环境:Ubunt ...