4.18
二分查找并不难,主要是要找到第一次出现的位置。
本来想的是,找到md值,然后一直向前递减1,但是这样时间复杂度一定会超的。还是得继续采用二分查找。
class Solution {
/**
* @param nums: The integer array.
* @param target: Target to find.
* @return: The first position of target. Position starts from 0.
*/
public int binarySearch(int[] nums, int target) {
int low = 0;
int height = nums.length-1;//write your code here
int mid = 0;
while(low < height){
if(nums[low] == target){
return low;
}
if(nums[low] > target){
return -1;
}
if(nums[height] < target){
return -1;
}
mid = (low + height)/2;
if(nums[mid] < target){
low = mid+1;
}
else if(nums[mid] > target){
height = mid-1;
}
else{
height = mid;
}
}
if(nums[height] == target){
return height;
}
return -1;
//return -1;
}
}