数据结构与算法(二分法查找的几个变形问题)

  1>查找第一个值等于给定值的元素

列:

我们用二分法查找的时候首先拿8与a[4]进行比较,发现a[4]<8,所以在a[5]与a[9]之间查找,8与a[7]进行比较,发现刚好相等就返回,但是我们需要的是查找第一个值等于给定值的元素,意思就是我们需要查找的元素是a[5]

public int bsearch(int[] a,int n,int value){
    int low = 0;
    int heigh = n-1;
while(low <= heigh){
    int mid = low +((heigh-low) >> 1);
    if(a[mid] > value){
        heigh = mid-1;
    
    }else if(a[mid] < value){
     low = low +1;
    }else{
       if((mid==0) &&( a[mid-1] != value)){
            return a[mid];
       }else{
           high = mid-1;
       }
    }

}
   return -1;

}

2>查找最后一个值等于给定的值

public  int bsearch(int[] a,int n,int value){
   int low = 0;
   int heigh = n-1;
    while(low <= heigh){
      int mid = low +((heigh-low) >> 1)
      if(a[mid] > value){
           heigh = mid-1;
      }else if(a[mid] < value){
        low = mid +1
       }else{ 
            if((mid==0) && (a[mid+1] != value)) {
                  return a[mid]
            }else{
                  low = mid +1;
             }     
      }
      
    }
return -a;

}

3>查找第一个值等于大于给定的值

public int bsreach(int[] a,int n,int value){
    int low = 0;
    int heigh = n-1;
    while(low <= heigh){
        int mid = low + ((heigh-1) >> 1);
        if(a[mid] >= value){
            if(mid==0 || (a[mid-1] < value)){
                return a[mid]
            }else{
                heigh = mid-1
             }
        }else{
             low = mid+1
         }
    }
return -1;
}

4>查找最后一个值小于等于给定元素的值,这里的代码我就不写,我在网上找一个,作为参考

   总结.二分法查找几种重要的变形问题已经圆满结束,有疑问的朋友可以留言.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值