二分查找--查找重复有序数组中最左边的target

原创 2017年10月06日 16:08:10

二分查找是在面试中经常会遇到的面试题,根据普通的二分查找还衍生出了二分查找的其他情况,比如有序数组中的目标出现多次,利用二分查找返回在最左边出现的目标值或者是最右边出现的目标值。
查找最左边出现的目标值

public static int binarySearchLeft(int[] arr,int target){
        if(arr==null||arr.length==0){
            return -1;
        }
        int left = 0;
        int right = arr.length-1;
        while(left<right){
            int mid = (left+right)/2;
            if(arr[mid]<target){
                left = mid+1;
            }else {
                right = mid;
            }
        }
        if(arr[right]==target){
            return right;
        }
        return -1;
    }

查找最右边出现的目标值

public static int binarySearchRight(int[] arr,int target){
        if(arr==null||arr.length==0){
            return -1;
        }
        int left = 0;
        int right = arr.length-1;
        while(left<right){
            int mid = (left+right)/2;
            if(arr[mid]<=target){
                left = mid;
            }else {
                right = mid-1;
            }
        }
        if(arr[left]==target){
            return left;
        }
        return -1;
    }

END

版权声明:本文为博主原创文章,未经博主允许不得转载。

循环有序数组中的二分查找 Search in a rotated sorted array

二分查找是必须要掌握的技能。二分查找适用于有序的、顺序的存储结构。 1、可以用它来查找某一个数 2、可以用于查找某一个范围。如《二分查找有序数组中某个数的所在范围 Search for a Rang...
  • luckyjoy521
  • luckyjoy521
  • 2013年12月22日 19:16
  • 2183

带有重复元素的有序数组二分查找

在牛客上看到这样一道题: 题目描述 统计一个数字在排序数组中出现的次数。      一般首先会想到顺序遍历一遍,时间复杂度o(n),如果这么简单,这道题就没什么必要出了。  其实...
  • u014609111
  • u014609111
  • 2016年12月07日 16:52
  • 1243

二分查找思想寻找有序数组中查找最小值

思想:循环有序数组最大的特点是利用二分查找时,有一边总是有序的,利用这个特点,利用value存储历史最小值 当左边有序,则用A[low]与value比较即可得出当前左边的最小值,然后跳转到右边看是否...
  • cz28274815
  • cz28274815
  • 2014年09月13日 11:23
  • 979

有序数组的二分查找

二分查找的优点是比较次数少,查找数度快,但是在查找之前必须要简历有序表。另外,二分查找只适用于顺序存储的有序表,而不适用于链接存储的有序表。 二分查找的过程:首先将x与数组的中间项进行比较,...
  • zbao6062
  • zbao6062
  • 2015年01月28日 18:14
  • 1800

插入元素到有序数组,二分搜索查找插入位置

当一个数组有序时,要向其中插入元素,可以先使用二分搜索查找其要插入的位置,位置确定后可以执行插入操作。 其中二分搜索的循环体如下(部分代码,具体见文章最后): while(low...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年07月02日 07:57
  • 1786

二分查找有序数组中某个数的所在范围 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
  • 1531

含有重复元素的二分查找算法

rust已经有binary_search了,但不能很好的处理有重复元素的查找。 下面这个是我按照网上查找到的原理自己实现的,这个处理重复元素比较好,如果key有重复,那么总是查找到最小的那个inde...
  • varding
  • varding
  • 2015年09月18日 10:19
  • 2498

有序表查询之一:java实现整型数组二分查找

引言:要从杂乱无章随意堆放的物品中找到目标可能不是一件容易的事,但是有规律可循的实物中,我们总是能通过一定的手段快速“悠闲地”找到我们想要的东西。比如从一本字典中可以快速查找到我们要查询的汉字或者单词...
  • Somhu
  • Somhu
  • 2017年09月11日 18:34
  • 112

34. Search for a Range(二分查找有重复元素数组中的目标数的第一个位置和最后一个位置)

Given a sorted array of integers, find the starting and ending position of a given target value. ...
  • u010005161
  • u010005161
  • 2016年06月13日 23:12
  • 705

有序数组之二分查找

数据结构与算法是程序深入设计需要理解的知识。关于数据结构和算法就从最简单的部分开始了。来看第一个问题:数组的二分查找。      数组是我们常见的数据结构,在程序设计中应用广泛。关于数组的操作通常是:...
  • cai2016
  • cai2016
  • 2016年07月10日 21:20
  • 1180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分查找--查找重复有序数组中最左边的target
举报原因:
原因补充:

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