For a given sorted array (ascending order) and a number target
, find the first index of this number in time O(log n)
complexit Y.
If the target number does not exist in the array, return -1
.
Example
If the array is [1, 2, 3, 3, 4, 5, 10]
, for given target 3
, return 2
.
Analysis: An ordered array is given in the question, and each element is not necessarily unique, finding the position where the target first appears. The key to this problem is that when nums[mid] = = target, instead of returning mid, it moves the mid point of the end and continues looking forward to see if there are no identical elements.
classSolution {/** * @paramnums:the an integer array. * @paramTarget:target to find. * @return: The first position of target. Position starts from 0. */ Public intBinarySearch (int[] Nums,inttarget) { if(Nums.length = = 0) { return-1; } intStart = 0, end = nums.length-1; while(Start + 1 <end) { intMID = start + (End-start)/2; if(Nums[mid] = =target) {End=mid; }Else if(Nums[mid] <target) {Start=mid; }Else{End=mid; } } if(Nums[start] = =target) { returnstart; } if(Nums[end] = =target) { returnend; } return-1; }}
[Lintcode 14] First Position of Target