34. Search for a Range

来源:互联网 发布:python snmpgetbulk 编辑:程序博客网 时间:2024/05/20 14:16

Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,

return [3, 4].

public class Solution {  public int[] searchRange(int[] nums, int target) {    int [] res = {-1,-1};        if(nums.length == 0 || nums == null){        return res;    }        int l = 0;        int r = nums.length - 1;        int m = 0;        while(l <= r){            m = l + (r - l)/2;        if(nums[m] == target){        break;        }        if(nums[m] < target){        l = m + 1;        }        if(nums[m] > target){        r = m - 1;        }        }        if(nums[m] != target){        return res;        }        int mid = m;        //search for the right bond        l = mid;        r = nums.length - 1;                while(l <= r){        m = l + (r - l)/2;        if(nums[m] == target){        l = m + 1;        }else{        r = m - 1;        }        }        res[1] = r;        //search for the left bond        l = 0;        r = mid;        while(l <= r){        m = l + (r - l)/2;        if(nums[m] == target){        r = m - 1;        }else{        l = m + 1;        }        }        res[0] = l;        return res;    }}


0 0