关于​​lower_bound()​​​和​​upper_bound()​​:

参考:​​关于lower_bound( )和upper_bound( )的常见用法​​

注意:查找的数组必须要是排好序的。因为,它们查找的方式也是二分查找,所以,复杂度为​​log(n)​

①从小到大排序

​lower_bound(begin,end,num)​​​:从数组的​​begin​​​位置到​​end-1​​位置二分查找第一个大于或等于​num​​​的数字,找到并返回该数字的地址,不存在则返回​​end​​​。通过返回的地址减去起始地址​​begin​​,得到找到数字在数组中的下标。

​upper_bound(begin,end,num)​​​:从数组的​​begin​​​位置到​​end-1​​位置二分查找第一个大于​num​​​的数字,找到并返回该数字的地址,不存在则返回​​end​​​。通过返回的地址减去起始地址​​begin​​,得到找到数字在数组中的下标。

②从大到小排序

​lower_bound(begin,end,num,greater<type>())​​​:从数组的​​begin​​​位置到​​end-1​​位置二分查找第一个小于或等于​num​​​的数字,找到并返回该数字的地址,不存在则返回​​end​​​。通过返回的地址减去起始地址​​begin​​,得到找到数字在数组中的下标。

​upper_bound(begin,end,num,greater<type>())​​​:从数组的​​begin​​​位置到​​end-1​​位置二分查找第一个小于​num​​​的数字,找到并返回该数字的地址,不存在则返回​​end​​​。通过返回的地址减去起始地址​​begin​​,得到找到数字在数组中的下标。

总结:如果是​​lower_bound()​​​会有等于,​​upper_bound()​​​没有等于,默认是大于(或等于),加了​​greater<type>()​​是小于(或等于)

CAD加油!欢迎跟我一起讨论学习算法