leetcode: Search for a Range

来源:互联网 发布:淘宝网葫芦丝背包 编辑:程序博客网 时间:2024/05/17 04:05

由于输入是有序的数组,因而仍旧可以使用二分的方法确定上界和下界。  为了找到左侧边界,在A[mid]大于等于target的时候都要左移right;同理找右侧边界时在A[mid]小于等于target时都要右移left。   对得到的right和left判断其是否在数组范围及其取值是否和target相同来决定输出。


public class Solution {    public int[] searchRange(int[] A, int target) {        int n=A.length;        int l=0,r=n-1;        while(l<=r)        {            int mid = (r+l)/2;            if( A[mid]>=target )            {                r=mid-1;            }            else            {                l=mid+1;            }        }        int left=l;        l=0;r=n-1;        while(l<=r)        {            int mid = (r+l)/2;            if( A[mid]<=target )            {                l=mid+1;            }            else            {                r=mid-1;             }        }        int right=r;        if( left>=l || right<0 || A[left]!=target || A[right] !=target )        {            left=-1;right=-1;        }        int[] res = new int[2];        res[0] = left;        res[1] = right;        return res;    }}


0 0
原创粉丝点击