二分查找最后一个小于等于和第一个大于等于某对象的数组元素位置
2014-03-30 22:17
330 查看
funny:
int findLastLE(int *array, int n, int target) // satisfy condition: array[?] <= target and the last one { int start = 0, end = n - 1; while (start <= end) { int mid = (start + end) / 2; if (array[mid] <= target) start = mid + 1; else if (array[mid] > target) end = mid - 1; } if (start == 0) return -1; return start - 1; } int findFirstGE(int *array, int n, int target) // satisfy condition: array[?] >= target and the first one { int start = 0, end = n - 1; while (start <= end) { int mid = (start + end) / 2; if (array[mid] < target) start = mid + 1; else if (array[mid] >= target) end = mid - 1; } if (end == n - 1) return -1; return end + 1; }
相关文章推荐
- 二分查找、二分查找小于等于key的最后一个元素、二分查找大于等于key的第一个元素
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- C++算法库学习__std::sort__对 vector进行排序_排序后就可以进行使用std::lower_bound进行二分查找(查找第一个大于等于指定值的迭代器的位置)__std::unique
- C++算法库学习__std::sort__对 vector进行排序_排序后就可以进行使用std::lower_bound进行二分查找(查找第一个大于等于指定值的迭代器的位置)__std::unique
- 二分实现查找不小于x的第一个数/不大于x的最后一个数
- 34. Search for a Range(二分查找有重复元素数组中的目标数的第一个位置和最后一个位置)
- [面试] 在数组查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
- 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
- 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
- 在数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数[#63]。
- 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
- 二分法查找(大于,大于等于x的最小,小于,小于等于x的最大值)
- [面试] 在数组查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
- Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
- 二分查找:在有序数组中搜索大于等于x的数的最小下标
- 在数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
- 在数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
- 在数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数
- 在一个int数组里查找出所有这样的数,它大于等于左侧所有数,小于等于右侧所有数。