python实现的lower_bound和upper_bound
2016-09-14 16:37
441 查看
1. lower_bound(nums, target)
在非递减数组nums中,lower_bound(nums, target)返回第一个大于等于target的值得位置,如果nums中元素均小于target(即不存在>=target的元素),则返回nums的长度(即target如果要插入到nums中,应该插入的位置)#coding=utf-8
#返回nums中第一个>=target的值得位置,如果nums中都比target小,则返回len(nums)
def lower_bound(nums, target):
low, high = 0, len(nums)-1
pos = len(nums)
while low<high:
mid = (low+high)/2
if nums[mid] < target:
low = mid+1
else:#>=
high = mid
pos = high
return pos测试:
nums = [10, 10, 10, 20, 20, 20, 30, 30]
print lower_bound(nums, 9),
print lower_bound(nums, 10),
print lower_bound(nums, 15),
print lower_bound(nums, 20),
print lower_bound(nums, 25),
print lower_bound(nums, 30),
print lower_bound(nums, 40)运行结果:
2. upper_bound(nums, target)
在非递减数组nums中,upper_bound(nums, target)返回第一个大于target的值的位置,如果nums中元素均小于等于target(即不存在>target的元素),则返回nums的长度(即target如果要插入到nums中,应该插入的位置)#返回nums中第一个>target的值得位置,如果nums中都不比target大,则返回len(nums)
def upper_bound(nums, target):
low, high = 0, len(nums)-1
pos = len(nums)
while low<high:
mid=(low+high)/2
if nums[mid]<=target:
low = mid+1
else:#>
high = mid
pos = high
return pos测试:
nums = [10, 10, 10, 20, 20, 20, 30, 30]
print upper_bound(nums, 9),
print upper_bound(nums, 10),
print upper_bound(nums, 15),
print upper_bound(nums, 20),
print upper_bound(nums, 25),
print upper_bound(nums, 30),
print upper_bound(nums, 40)运行结果:
c++ lower_bound源码参考:http://www.cplusplus.com/reference/algorithm/lower_bound/
c++ upper_bound源码参考:http://www.cplusplus.com/reference/algorithm/upper_bound/
相关文章推荐
- C++ STL:lower_bound与upper_bound实现
- 实现lower_bound和upper_bound算法
- STL upper_bound(),lower_bound()函数的学习+自己的实现
- SICP 习题2.7 实现区间的lower-bound 和 upper-bound
- stl lower_bound,upper_bound的实现;
- c语言实现lower_bound和upper_bound
- lower_bound和upper_bound算法实现
- LeetCode-34-Search for a Range Python实现lower_bound
- 二分查找:binary_search、lower_bound和upper_bound的实现
- 手动实现stl中的lower_bound和upper_bound
- 自己实现STL模板upper_bound() 和lower_bound()
- lower_bound和upper_bound的实现
- stl algorithm : count、find、lower_bound、upper_bound和equal_range的区别
- Python对字母字符(串)中大小写转换函数--upper() 和 lower()
- STL:lower_bound & upper_bound & binary_search (UVaOJ 146)
- lower_bound and upper_bound 返回
- hdu (4268)贪心muliset的upper_bound和lower_bound
- STL经典算法集锦<五>之查找(lower_bound/upper_bound/binary_search)
- hdu 3436 Queue-jumpers (经典离散化,树状数组实现lower_bound)
- 转:正确区分不同的查找算法count,find,binary_search,lower_bound,upper_bound,equal_range