基础算法-二分算法

二分算法

二分

整数二分

整数二分分为两种,一种找最左边的,一种找最右边的。

模板

最左边

public int search (int[] nums, int target) {
  if(nums == null || nums.length == 0){
    return -1;
  }
  int l = 0, r = nums.length - 1;
  while(l < r){
    int mid = l + r >> 1;
    if(nums[mid] >= target){
      r = mid;
    }else{
      l = mid + 1;
    }
  }
  return nums[l] == target ? l : -1;
}

最右边

public int search (int[] nums, int target) {
  if(nums == null || nums.length == 0){
    return -1;
  }
  int l = 0, r = nums.length - 1;
  while(l < r){
    int mid = l + r + 1 >> 1;
    if(nums[mid] <= target){
      l = mid;
    }else{
      r = mid - 1;
    }
  }
  return nums[l] == target ? l : -1;
}

浮点数二分

public void search(double l, double r){
	double eps = 1e-6;   // eps 表示精度,取决于题目对精度的要求
    while (r - l > eps)
    {
        double mid = (l + r) / 2;
        if (check(mid)) r = mid;
        else l = mid;
    }
    return l;
}

借鉴Acwing算法模板

全部评论

相关推荐

如题,他是要劝退我了吗
椛鸣:根据你的时间 来给你安排任务 如果你时间长 可能会参与到一些长期的项目 时间短 那就只能做点零工
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务