【二分查找】查找数组中第一个比k大的数的下标
2015-01-06 20:04
267 查看
题目:EPI
提示:当left和right都是非负数时,使用 mid = left + (right - left) / 2;这种形式可以避免溢出。
当left和right一个为负另一个为非负时,用mid = (left + right) / 2;这种形式可以避免溢出。
提示:当left和right都是非负数时,使用 mid = left + (right - left) / 2;这种形式可以避免溢出。
当left和right一个为负另一个为非负时,用mid = (left + right) / 2;这种形式可以避免溢出。
int search_first_larger_k(int* arr, int length, int k) { if (arr == nullptr || length <= 0 || arr[length - 1] <= k) return -1; int res = length - 1,left=0,right=length-1; while (left <= right)//不需要加判断条件 && right>=0 && left<length { //int mid = (left + right) / 2; 这种方法会溢出!!!! int mid = left + (right - left) / 2; if (arr[mid] > k) { res = mid; right = mid - 1; } else// if (arr[mid] <= k) left = mid + 1; } return res; }
相关文章推荐
- 【二分查找】查找数组中第一个比k大的数的下标
- 【二分查找】在一个长度未知的数组中查找一个数,返回其下标,时间复杂度O(logn)
- 二分查找:在有序数组中搜索大于等于x的数的最小下标
- 34. Search for a Range(二分查找有重复元素数组中的目标数的第一个位置和最后一个位置)
- 在数组中进行二分查找找出某数在数组中的下标
- 二分查找 基于有序数组 返回下标
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- 在数组中进行二分查找找出某数在数组中的下标
- C语言//选择排序 //查找数组范围内最小的值跟第一个值交换 k记录最小值下标
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 设计一个模板类Sample,用于对一个有序数组采用二分法查找元素下标
- 二分查找binsearch: 在v[0]&lt;=v[1]&lt;=v[2]&lt;=......&lt;=v[n-1]中查找x,数组v的元素必须以升序排列
- 数组-二分查找
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)