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) {
if(nums.length==0){
return -1;
}
int upindex=nums.length-1;
int downindex=0;
while(true){
if(nums[(upindex+downindex)/2]==target){
int res=(upindex+downindex)/2;
while(res!=0&&nums[res-1]==target){
res--;
}
return res;
}else if(upindex==downindex||upindex-downindex<=1){
return -1;
}else if(nums[(upindex+downindex)/2]>target){
upindex=(upindex+downindex)/2;
}else if(nums[(upindex+downindex)/2]<target){
downindex=(upindex+downindex)/2;
}
//System.out.println("upindex"+upindex+"downindex"+downindex);
}
}
}
/**
* @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) {
if(nums.length==0){
return -1;
}
int upindex=nums.length-1;
int downindex=0;
while(true){
if(nums[(upindex+downindex)/2]==target){
int res=(upindex+downindex)/2;
while(res!=0&&nums[res-1]==target){
res--;
}
return res;
}else if(upindex==downindex||upindex-downindex<=1){
return -1;
}else if(nums[(upindex+downindex)/2]>target){
upindex=(upindex+downindex)/2;
}else if(nums[(upindex+downindex)/2]<target){
downindex=(upindex+downindex)/2;
}
//System.out.println("upindex"+upindex+"downindex"+downindex);
}
}
}