题目

类型:二分查找

解题思路

本题是二分搜索的基本形式,不过并不实用,比如 target 重复出现多次,本算法得出的索引位置是不确定的。
更常见的二分搜索形式是搜索左侧边界和右侧边界,即对于 target 重复出现多次的情景,计算 target 的最小索引和最大索引。

代码

  1. class Solution {
  2. public int search(int[] nums, int target) {
  3. int left = 0;
  4. int right = nums.length - 1;
  5. int res = -1;
  6. if (nums.length == 0) {
  7. return res;
  8. }
  9. while (left <= right) {
  10. int mid = left + (right - left) / 2;
  11. if (nums[mid] < target) {
  12. left = mid + 1;
  13. } else if (nums[mid] > target) {
  14. right = mid - 1;
  15. } else if (nums[mid] == target) {
  16. res = mid;
  17. break;
  18. }
  19. }
  20. return res;
  21. }
  22. }