迟到的hello world

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在已经排好序的数组中(非降序),找到目标值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不可靠,需要手动进行进一步判断

 

posted on 2022-04-25 17:31  春宵苦短日高起  阅读(45)  评论(0)    收藏  举报