二分查找求解equal_range区间

原创 2015年07月06日 17:27:14

总觉得二分查找很简单,可实现起来却发现一个小错误会导致程序结果出错,本题是解决眼高手低的利题

eaual_range返回的一对指针,指向第一个等于key值得元素和指向第一个大于该值的元素。因此,除了常规的非重复元素的二分查找(重复元素可能查找到任意一个值),还可以实现equal_range的方式考察。

先看常规的二分查找

int binsearch(int arr[], int left, int right, int key)
{
    if(arr == nullptr)
        return -1; 
    while(left <= right)
    {
        int mid = left + ((right - left) >> 1);
        if(arr[mid] < key)
            left = mid + 1;
        if(arr[mid] > key)
            right = mid - 1;
        else
            return mid; 
    }   
    return -1;
}

查找元素第一次出现的下标

int binsearch_min(int arr[], int left, int right, int key)
{
    if(!arr)    
        return -1;
    while(left < right)
    {
        int mid = left + ((right-left)>>1);
        if(arr[mid] < key)
        {
            left = mid+1;
        }else
        {
            right = mid;
        }
    }
    if(arr[left] == key)   
        return left;
    return -1;
}

返回刚好大于key的元素下标

int binsearch_justgreat(int arr[], int left, int right, int key)
{
    if(!arr)    
        return -1;
    while(left < right)
    {
        int mid = left + ((right-left)>>1);
        if(arr[mid] <= key)
        {
            left = mid + 1;
        }else
        {
            right = mid;
        }
    }
    if(arr[right] > key) 
        return right;
    return -1;
}

基于二分查找法的数值区间查找

本文给出基于二分查找法的区间查找的定义,并辅以C++源码,并介绍一下二分查找法的区间查找的应用。...
  • zjq2008wd
  • zjq2008wd
  • 2014年08月18日 14:54
  • 1766

算法整理-二分查找列表最大值

需求描述 已知一个列表是先增后减的半有序列表,现在需要找出列表中的最大值,列表长度可能很大,考虑时间复杂度,该算法该如何实现? 实现思路 在不考虑时间复杂的的情况下,可以直接遍历,用max标识...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2016年11月04日 17:49
  • 854

二分查找(Binary Search) 常见问题解决方法总结

缘由 今天浏览 何登成的技术博客  无意中发现了写的blog,二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现。 如下: 问题背景 今年的实习生招聘考试,我出了一道...
  • gfsfg8545
  • gfsfg8545
  • 2013年12月13日 21:48
  • 8576

NOI(1.11编程基础之二分查找-02:二分法求函数的零点)

在我们的编程学习中,遇到了一些问题需要将一个大规模的问题分解成几个较小规模的问题,通过对较小规模问题的求解达到对整个问题的解,这种方法叫做分治法,而在分治法中又衍生出来了一个小方法,叫做二分查找,相信...
  • qq_38627852
  • qq_38627852
  • 2017年05月19日 13:16
  • 371

二分查找各种情况大总结

二分查找多次刷题时遇到,虽然每次也能写对,但花了蛮多时间,没好好想过。而且网上的太多版本,并不是很简洁,而且边界条件变化情况太多,容易混淆,下面是自己对二分查找的一些思考和总结,尽量写得简单易懂。 ...
  • yefengzhichen
  • yefengzhichen
  • 2016年08月30日 21:40
  • 11743

二分查找有序数组中某个数的所在范围 Search for a Range

题目源自于leetcode。二分查找题。 题目:Given a sorted array of integers, find the starting and ending position of ...
  • luckyjoy521
  • luckyjoy521
  • 2013年12月04日 20:38
  • 1496

数据结构树之二分查找树

二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:...
  • mengsofts
  • mengsofts
  • 2014年04月08日 13:23
  • 4143

二分查找求上界和下界

二分查找求上界和下界假设序列有序,其区间为[left,right)[left, right),设middlemiddle为区间中间值,现在需要获得首个出现元素vv的位置,如果不存在,返回一个位置,在此...
  • q547550831
  • q547550831
  • 2016年05月30日 12:21
  • 1638

hdu 2104 K-th Number(静态求区间第k小+整体二分)

K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 46551   Accepted: 15...
  • qq_22522375
  • qq_22522375
  • 2016年05月01日 20:24
  • 777

动态规划_最优二分查找树

一、什么是最优二叉查找树 最优二叉查找树: 给定n个互异的关键字组成的序列K=,且关键字有序(k1 图一显示了给定上面的概率分布pi、qi,生成的两个二叉查找树的例子。图二就是在这种情况下一棵最...
  • llwszjj
  • llwszjj
  • 2013年11月19日 19:24
  • 2697
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分查找求解equal_range区间
举报原因:
原因补充:

(最多只允许输入30个字)