publicintbinarySearch(int[] nums, int target) { intleft=0, right = nums.length, ans = -1; while (left <= right) { intmid= left + (right - left) / 2; if (nums[mid] < target) { // Current mid could be a potential answer ans = mid; // Look right to see if there is a better answer left = mid + 1; } elseif (nums[mid] >= target) { right = mid - 1; } return ans; } }
publicintbinarySearch(int[] nums, int target) { intleft=0, right = nums.length, ans = -1; while (left <= right) { intmid= left + (right - left) / 2; if (nums[mid] <= target) { left = mid + 1; } elseif (nums[mid] > target) { // Current mid could be a potential answer ans = mid; // Look left to see if there is a better answer right = mid - 1; } return ans; } }
变种3: 在nums中, 找target, 但是如果出现多个target, 返回index最小的那个(first bad version), 如果没有target, 返回-1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
publicintbinarySearch(int[] nums, int target) { intleft=0, right = nums.length, ans = -1; while (left <= right) { intmid= left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } elseif (nums[mid] > target) { right = mid - 1; } else { // Current mid could be a potential answer ans = mid; // Look left to see if there is a better answer right = mid - 1; } return ans; } }
publicintbinarySearch(int[] nums, int target) { intleft=0, right = nums.length, ans = -1; while (left <= right) { intmid= left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } elseif (nums[mid] > target) { right = mid - 1; } else { // Current mid could be a potential answer ans = mid; // Look left to see if there is a better answer left = mid + 1; } return ans; } }