本质就是用pos标记去记录符合条件的下标,并且不断迭代更新,体会这个就能搞定全部
等于:
public int binaryEqual(int[] nums,int target,int left,int righ){
int pos = -1;
while(left<=right){
int mid = (left+right)>>1;
if (nums[mid]==target){
pos = mid;
break;
}else if(nums[mid]>target){
right=mid-1;
}else{
left=mid+1;
}
}
return pos;
}
最后一个小于:
public int binaryFirstL(int[] nums,int target,int left,int right){
int pos = -1;
while(left<=right){
int mid=(left+right)>>1;
if (nums[mid]<target){
pos = mid;
left = mid+1;
}else{
right = mid-1;
}
}
return pos;
}
最后一个小于或等于:(把<改成<=罢了)
public int binaryFirstLE(int[] nums,int target,int left,int right){
int pos = -1;
while(left<=right){
int mid=(left+right)>>1;
if (nums[mid]<=target){
pos = mid;
left = mid+1;
}else{
right = mid-1;
}
}
return pos;
}
第一个大于
public int binaryFirstG(int[] nums,int target,int left,int right){
int pos = -1;
while(left<=right){
int mid=(left+right)>>1;
if (nums[mid]>target){
pos = mid;
right = mid-1;
}else{
left = mid+1;
}
}
return pos;
}
第一个大于或等于(同理把>改成>=)
public int binaryFirstGE(int[] nums,int target,int left,int right){
int pos = -1;
while(left<=right){
int mid=(left+right)>>1;
if (nums[mid]>=target){
pos = mid;
right = mid-1;
}else{
left = mid+1;
}
}
return pos;
}