34. Search for a Range

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].

給定一個排好序的數組,找到target出現的開始位置和結束位置並以數組的形式返回。要求時間複雜度爲log(n),所以容易想到用二分查找算法,先找到數組開始的索引,然後再調用二分查找,讓target增加1,這個時候調用二分查找函數返回的是經過所有相同的target之後,第一個與target不同的數字,然後用返回的值再減1即可。

int start = SearchRange.BinarySearch(nums,target);
    if(nums.length==start||nums[start]!=target){
    		return new int []{-1,-1};
    	}
        int [] res = new int [2];
        res[0] = start;
        res[1] = SearchRange.BinarySearch(nums,target+1)-1;
        return res;
    }
    public static int BinarySearch(int [] nums,int target){
    	int low = 0;
        int high = nums.length;
        while(low<high){
        	int mid = low+(high-low)/2;
        	if(target>nums[mid]){low = mid+1;}
        	else { high = mid;}
        }
        return low; 


發佈了64 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章