在已经排好序的数组中(非降序),找到目标值target第一次出现的位置或者第一个比target大的值出现的位置。
private static int binarySearch(int[] nums,int target,boolean flag){ int len=nums.length; int left=0,right=len-1; int ans=nums.length; while(left<=right){ int mid=(right-left)/2+left; if( (nums[mid]>target) || (flag && nums[mid]>=target)){ right=mid-1; ans=mid; }else{ left=mid+1; } } return ans; } }
flag 为 false 时,mid下标所表示的值 严格大于target时才记录给ans并返回,是第一个大于target的下标
flag 为true时,right边界左移的条件放宽,返回的是第一个等于target的下标
当mid无命中时,返回ans不可靠,需要手动进行进一步判断
浙公网安备 33010602011771号