初始化指针 left = 0, right = n - 1。 当 left <= right: 比较中间元素 nums[pivot] 和目标值 target 。 如果 target = nums[pivot],返回 pivot。 如果 target < nums[pivot],则在左侧继续搜索 right = pivot - 1。 如果 target > nums[pivot],则在右侧继续搜索 left = pivot + 1。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution{ publicintsearch(int[] nums, int target){ // 定义二分查找变量 int center, left = 0, right = nums.length - 1; // 遍历查找数据,找到则返回 while (left <= right) { center = left + (right - left) / 2; if (nums[center] == target) return center; if (target < nums[center]) right = center - 1; else left = center + 1; } // 没有找到数据则返回-1 return -1; } }
/* The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); */
publicclassSolutionextendsVersionControl{ publicintfirstBadVersion(int n){ // 定义二分查找变量 int center, left = 1, right = n; while (left < right) { center = left + (right - left) / 2; // 判断center版本是否合格 if(isBadVersion(center)) { right = center; } else { left = center + 1; } } return left; } }
classSolution{ publicintsearchInsert(int[] nums, int target){ int center = nums.length, left = 0, right = nums.length - 1; while (left <= right){ int mid = ((right - left) >> 1) + left; if (nums[mid] < target) { left = mid + 1; } else { center = mid; right = center - 1; } } return center; } }
Copyright 2021 sunfy.top ALL Rights Reserved