Wednesday, January 7, 2015

LeetCode 34: Search for a Range

Given a sorted array of integers, 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[] A, int target) {
        // Adopt a modified binary search
        int[] range = {-1,-1};
        int n = A.length;
        
        if (n == 0)
            return range;
            
        int lo = 0, hi = n-1, mid;
        
        while (lo <= hi)
        {
            mid = lo + (hi-lo)/2;
            
            if (target < A[mid])
                hi = mid-1;
            else if (target > A[mid])
                lo = mid+1;
            else
            {
                range[0] = mid;
                
                for (int i = mid-1; i >= 0; i--)
                    if (A[i] == A[mid])
                        range[0] = i;
                    else
                        break;
                    
                range[1] = mid;
                
                for (int i = mid+1; i < n; i++)
                    if (A[i] == A[mid])
                        range[1] = i;
                    else
                        break;
                    
                return range;
            }
        }
        
        return range;
    }
}

No comments:

Post a Comment