编程珠矶 习题 4.6 利用二分搜索找到一个数在顺序数组里面的下限和上限
2012-07-14 15:41
260 查看
很显然,这道题目用二分搜索去解答,关键是怎么样去找这个上限点和下限点,方法很简单,每次去mid, 如果aa[mid] 比key要大的话,那么mid 是key的一个上限,但不一定是最小上限,同理。。。那么不断二分,不断逼近,最后即可求得解
void search_between(int arr[], int n_size, int *up, int *down,int key) { int left = 0; int right = n_size - 1; *up = INT_MAX; *down = INT_MIN; while(left <= right) { int mid = (left + right)>>1; if(arr[mid] < key) { *down = mid; left = mid + 1; } else { *up = mid; right = mid - 1; } } }
相关文章推荐
- [经典面试题][谷歌]一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素
- 算法导论第十四章习题14.1-7利用顺序统计数统计数组中的逆序数
- new 第四届 走迷宫 (搜索,加二分搜索)(为了防止走回头路,添加一个flag[][]数组)
- 二分搜索——在有序数组中找到目标函数出来的最左端的位置
- 【二分查找】为非负数组寻找一个上限cap,使得数组的和为给某个给定的数s
- 编程珠矶 4.6 习题 2 二分搜索第一次出现的key
- 习题 6.9 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
- 搜索手机里面的所有App,找到其中一个并启动
- 在二分搜索应用于未排序的数组时加入部分检测程序—编程珠玑第五章习题5
- 利用二分查找在循环递增数组中检索一个元素
- 花一天时间搜索,居然找到一个德国人写的论文里面有用Matlab读取*.spa文件的程序片段
- 20180305(数组,顺序搜索,二分搜索,数组排列,C字符串)
- 利用二分查找在循环递增数组中检索一个元素
- 【滴滴笔试】利用快排找到一个无序的数组中的第K大的数
- 习题 6.5 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。
- 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有
- 如何找到一个数组里面重复次数最多的数
- 求一个数字在数组中排序,顺序搜索
- 谷歌面试题--一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间
- 算法习题54:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分