美文网首页lintcode
14. 二分查找

14. 二分查找

作者: 和蔼的zhxing | 来源:发表于2017-11-15 23:08 被阅读12次

给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。
如:在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2。
思路:二分查找是基本功,可以写迭代也可以写while循环,目前还是习惯写while循环一些,但是这里的要求和一般的二分查找还不太一样,主要的原因是题目要求查找出第一个,也就是即使找到了一个,也不能立即返回,需要找到第一个才行,我想了一下,有一个思路:找到了把结果赋值给一个变量,然后end更新为mid-1(因为第一个肯定比这个索引小,如果存在的话),一直把所有的二分查找都找完,返回最新的一个查找的结果就是要求的第一个的索引:

int binarySearch(vector<int> &array, int target) {
        auto beg=array.begin();
        auto end=array.end()-1;
        int res=-1;   //如果这个res最后还是-1的话,就说明没有找到。
        while(beg<=end)
        {
            auto mid=beg+(end-beg)/2;
            if(*mid==target)
            {
            res=mid-array.begin();    //这里是找到了,但不能保证是第一个
            end=mid-1;    //mid仍然更新。
            }
            if(*mid<target)
            beg=mid+1;
            if(*mid>target)
            end=mid-1;
           
        }
        if(res!=-1)
        return res;
        // write your code here
        return -1;
    }

over

相关文章

  • 14.二分查找

    14. 二分查找 描述 笔记 数据 评测 给定一个排序的整数数组(升序)和一个要查找的整数target,用O(lo...

  • 14. 二分查找

    给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的...

  • js刷林扣 lintcode(2017年1月)

    题目前的数字是对应的lintcode的题目序号 14.二分查找 给定一个排序的整数数组(升序)和一个要查找的整数t...

  • python二分查找算法

    文章概述 二分查找法介绍 简单查找与二分查找对比 二分查找  二分查找算法主要思想:在有序列表中查找指定元素,先从...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 二分查找

    [TOC] 二分查找的基础模板 二分查找靠左的Index基础模板 二分查找靠右的Index基础模板 二分查找插入t...

  • 二分查找法

    二分查找法 二分查找法(递归)

  • 二分查找(递归、非递归)

    二分查找(递归) 二分查找(非递归)

  • 二分查找(递归、非递归)

    二分查找(递归) 二分查找(非递归)

  • 二分查找

    什么是二分查找?二分查找,也叫折半查找(Binary Search),它是一种效率较高的查找方法。二分查找的条件:...

网友评论

    本文标题:14. 二分查找

    本文链接:https://www.haomeiwen.com/subject/hjlkvxtx.html