力扣 二分法

二分查找

难度 简单   类型 二分

 查找数

  给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

class Solution {
    public int search(int[] nums, int target) {
      int l,r,mid;
      l =0;r=nums.length-1;
      while(ltarget)
          r=mid-1;
          else if(l==r)  break;
          else  l=mid;
  
      }
      if(nums[l]==target)
       return l;
      else return -1;
    }

}

产品测试

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。

假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。


public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
       int l=1;
        int r=n;
         int mid;
        while(l

    这个题目的关键在于 二分点的选择  mid=l+(r-l)/2;

二分插入

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

最后的判断是为了应付 给定目标数大于数组中所有数的情况

class Solution {
    public int searchInsert(int[] nums, int target) {
      int l=0,r=nums.length-1;
      while(l=target)
           r=mid;
           else l=mid+1;
      }
            if(nums[l]


 

你可能感兴趣的:(算法)