Binary Search

  • Binary Search Version 1:

    public boolean binarySearch(int[] nums, int target) {
      int low = 0;
      int high = nums.length - 1; // 注意点1
      while (low <= high) { //注意点2
          int mid = low + (high - low) / 2;
          if (nums[mid] == target) {
              return true;
          }
          if (nums[mid] > target) {
              high = mid - 1; //注意点3
          } else {
              low = mid + 1;
          }
      }
      return false;
    }
    
  • 找到刚好比val大的index

int binarySearch(int[] last, int start, int end, int val) {
    while(start < end) {  //没有等于
        int mid = start + (end-start)/2;
        if (last[mid] > val) {
            end = mid;
        } else if (last[mid] < val) {
            start = mid+1;
        } else {
            return mid; //没有减1
        }
    }

    return end;
}
  • find peak element
int low = 0, mid = 0, high = nums.length - 1;
while(low < high) {
    mid = low + (high-low)/2;
    if(nums[mid] < nums[mid+1]) { // 此处的比较
        low = mid+1;
    } else {
        high = mid;
    }
}
return low;

results matching ""

    No results matching ""